1. 程式人生 > >LeetCode 144 Binary Tree Preorder Traversal

LeetCode 144 Binary Tree Preorder Traversal

LeetCode 144

題目的意思就是不用遞迴的方法輸出先序遍歷

其實遞迴本質上是在利用棧的性質,每次遞迴都是將一個函式壓入棧中。
所以我們可以用迴圈和棧模擬遞迴

class Solution {
public:
    TreeNode* s[100005];
    vector<int> ans;
    int tag=0;
    vector<int> preorderTraversal(TreeNode* root) {
        if(root==NULL) return ans;
        s[tag++]=root;
        TreeNode* term;
        while(tag>0)
        {
           term = s[tag-1];
            if(s[tag-1]->val!=-999999)
            ans.push_back(s[tag-1]->val);
           (*s[tag-1]).val=-999999;
        
           if(term->left!=NULL&&term->left->val!=-999999)
           {s[tag++]=term->left;continue;}
           
          
           if(term->right!=NULL&&term->right->val!=-999999)
           {s[tag++]=term->right;continue;}
           tag--;
           
        } 
        return ans;
    }
};