題目
給定一個二叉樹,返回它的前序遍歷。
示例:
輸入: [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;
}
};