&LeetCode144& 二叉樹的前序遍歷

題目

給定一個二叉樹,返回它的前序遍歷。

示例:
輸入: [1,null,2,3]
1

2
/
3

輸出: [1,2,3]

來源:力扣(LeetCode

思路

二叉樹的中序遍歷順序爲左-根-右;
使用棧的解法:
首先,從根節點開始,先將根節點壓入棧;
然後,再將其所有右子結點壓入棧,然後取出棧頂節點,保存節點值;
其次,再將當前指針移到其左子節點上,若存在左子節點,則在下次循環時又可將其所有左子結點壓入棧中。

C++代碼

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) 
    {
        vector<int> res;
        stack<TreeNode*> s;
        TreeNode *p = root;
        while (!s.empty() || p) 
        {
            if (p) 
            {
                s.push(p);
                res.push_back(p->val);
                p = p->left;
            } 
            else 
            {
                TreeNode *t = s.top(); 
                s.pop();
                p = t->right;
            }
        }
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章