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;
    }
};


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