二叉树的前序遍历
- 难度: 中等
- 通过率: 49.5%
- 题目链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal
题目描述
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
递归解法:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root){
vector<int> res;
traversal(root, res);
return res;
}
void traversal(TreeNode *node, vector<int>& res) {
if (!node){
return;
}
res.push_back(node->val);
traversal(node->left, res);
traversal(node->right, res);
}
};
基于栈的解法
观察递归解法,递归调用的第一层就访问 node->val
,而后遍历 node->left
,而 node->right
是保存在调用栈上的,因此在迭代的写法中,需要将 node->right
保存在栈里。
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
vector<int> res;
stack<TreeNode*> stk;
if(root){
stk.push(root);
}
while(!stk.empty()){
TreeNode *node = stk.top();
stk.pop();
while(node){
res.push_back(node->val);
if(node->right){
stk.push(node->right);
}
node = node->left;
}
}
return res;
}
};