二叉树遍历系列之一(递归遍历)

因递归遍历比较简单,也不是本系列的重点。三种形式遍历的递归代码十分相似,此处不再赘述过程,直接po代码了。
(以下代码均已leetcode上的problem为框架编写,经测试可通过leetcode test)

1.前序遍历

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> result;
        recur_traver(root,result);
        return result;
    }
    void recur_traver(TreeNode *root,vector<int> &res) {
        if(root) {
            res.push_back(root->val);
            recur_traver(root->left,res);
            recur_traver(root->right,res);
        }
    }
};

2.中序遍历

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        recur_inorder(root,res);   
        return res;
    }
    void recur_inorder(TreeNode *root,vector<int> &res) {
        if(root) {
            recur_inorder(root->left,res);
            res.push_back(root->val);
            recur_inorder(root->right,res);
        }
    }
};

3.后序遍历

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> res;
        postorder_recur(root,res);
        return res;
    }
    
    void postorder_recur(TreeNode *root,vector<int> &res) {
        if(root) {
            postorder_recur(root->left,res);
            postorder_recur(root->right,res);
            res.push_back(root->val);
        }
    }
};
posted on 2018-03-06 18:51  禾杉  阅读(165)  评论(0)    收藏  举报