LeetCode 144. 二叉树的前序遍历 (如何用迭代实现先序遍历)

二叉树的前序遍历

class Solution {
public:
    vector<int> ans;
    vector<int> preorderTraversal(TreeNode* root) {
        preOrder(root);
        return ans;
    }
    void preOrder(TreeNode* root){
        if(!root){
            return;
        }
        ans.push_back(root->val);
        preOrder(root->left);
        preOrder(root->right);
    }
};

仿照递归的思想,向下递归其实就是压栈,回溯其实就是出栈
有没有觉得和层次遍历的代码极其相似,其实就是把队列换成了栈,以及入栈(队列)的顺序不一样

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章