题目
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] 1 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?
考点
思路
见LeetCode94. Binary Tree Inorder Traversal
代码
1.递归
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ret;
preOrder(root,ret);
return ret;
}
void preOrder(TreeNode* root,vector<int> &ret)//注意用引用,不然返回不了ret
{
//preOrder:root->left->right
if(!root) return;
ret.push_back(root->val);
preOrder(root->left,ret);
preOrder(root->right,ret);
}
};
2.迭代+栈
画图,建辅助栈。
//迭代+栈
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ret;
stack<TreeNode*> stack;
TreeNode* curNode=root;
while(curNode || !stack.empty())
{
while(curNode){
stack.push(curNode);
ret.push_back(curNode->val);
curNode=curNode->left;
}
curNode=stack.top();
curNode=curNode->right;
stack.pop();
}
return ret;
}
};