专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 二叉树的递归树遍历介绍

二叉树的递归树遍历介绍

更新时间:2022-08-29 09:32:23 来源:赢咖4 浏览602次

递归的模板

1.确定递归函数的参数和返回值

void traversal(TreeNode* node, vector<int>& vec)

node是当前处理节点,vec用来存储结果,无返回值

2.确定终止条件

if (node == NULL) return;

递归结束的标志是当前节点为空

3.确定单层递归的逻辑

前序遍历是中左右顺序,中序遍历是左中右顺序,后序遍历是左右中顺序。根据遍历顺序,即排列下列三行代码,保存结果。

vec.push_back(node->val);
traversal(node->left);
traversal(node->right);

前序遍历

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;
        traversal(root, result);
        return result;
    }
    void traversal(TreeNode* node, vector<int>& vec) {
        if (node == NULL) return;
        vec.push_back(node->val); //中
        traversal(node->left);    //左
        traversal(node->right);   //右
    }
}

中序遍历

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;
        traversal(root, result);
        return result;
    }
    void traversal(TreeNode* node, vector<int>& vec) {
        if (node == NULL) return;
        traversal(node->left);    //左        
        vec.push_back(node->val); //中  
        traversal(node->right);   //右
    }
}

后序遍历

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;
        traversal(root, result);
        return result;
    }
    void traversal(TreeNode* node, vector<int>& vec) {
        if (node == NULL) return;
        traversal(node->left);    //左
        traversal(node->right);   //右
        vec.push_back(node->val); //中
    }
}

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>