LintCode - Binary Tree Preorder Traversal

解法一 recursion

三种方法,不同在于如何处理vector

class Solution {
public:
    vector<int> preorderTraversal(TreeNode * root) {
        if(!root) return {};
        vector<int> res{root->val};
        vector<int> left = preorderTraversal(root->left);
        vector<int> right = preorderTraversal(root->right);
        res.insert(res.end(), left.begin(), left.end());
        res.insert(res.end(), right.begin(), right.end());
        return res;
    }
};
class Solution {
public:
    vector<int> preorderTraversal(TreeNode * root) {
        vector<int> res;
        helper(root, res);
        return res;
    }
    void helper(TreeNode* root, vector<int>& res){
        if(!root) return;
        res.push_back(root->val);
        helper(root->left, res);
        helper(root->right, res);
    }
};
class Solution {
public:
    vector<int> res;
    vector<int> preorderTraversal(TreeNode * root) {
        res.clear();
        helper(root);
        return res;
    }
    void helper(TreeNode* root){
        if(!root) return;
        res.push_back(root->val);
        helper(root->left);
        helper(root->right);
    }
};

解法二 non-recursion

先right再left因为stack

class Solution {
public:
    vector<int> preorderTraversal(TreeNode * root) {
        stack<TreeNode*> st;
        vector<int> res;
        if(!root) return res;
        st.push(root);
        while(!st.empty()){
            TreeNode* t = st.top(); st.pop();
            res.push_back(t->val);
            if(t->right) st.push(t->right);
            if(t->left) st.push(t->left);
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/real_lisa/article/details/83989251