LeetCode 144二叉树的前序遍历
- 题目简述:给定一个二叉树,返回它的 前序 遍历。
- 输入:[1,null,2,3] 输出:[1,2,3]
- 思路:递归
class Solution {
public:
vector<int> res;
void dfs(TreeNode *root)
{
if(!root) return;
res.push_back(root->val);
dfs(root->left);
dfs(root->right);
}
vector<int> preorderTraversal(TreeNode* root) {
dfs(root);
return res;
}
};
- 思路:栈模拟递归:先将所有left入栈到底同时保存根节点值,再将栈顶出栈最后将right入栈
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> stk;
while(root || stk.size())
{
while(root)
{
res.push_back(root->val);
stk.push(root);
root = root->left;
}
root = stk.top();
stk.pop();
root = root->right;
}
return res;
}
};
- 迭代:栈先进后出,先压右节点后压左节点,先序遍历是
根左右
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if(!root) return res;
stack<TreeNode*> stk;
stk.push(root);
while(!stk.empty())
{
root = stk.top();
stk.pop();
res.push_back(root->val);
if(root->right) stk.push(root->right);
if(root->left) stk.push(root->left);
}
return res;
}
};