144. 二叉树的前序遍历
时间:2020年10月27日
知识点:dfs、stack
题目链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/
题目
给定一个二叉树,返回它的前序遍历。
示例1
输入:
[1,null,2,3]
1
\
2
/
3
输出:
[1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
思路
- 递归函数 以根节点 - 左节点 - 右节点顺序遍历
- 调用stack
- 一边放入答案数组 一边放到stack中 一直向左
- tmp = tmp->right 到右子树
代码
#include <iostream>
#include <stack>
#include <vector>
#include <stdio.h>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
dfs(ans,root);
return ans;
}
void dfs(vector<int>& ans,TreeNode* root){
if(root==nullptr){return;}
ans.push_back(root->val);
dfs(ans,root->left);
dfs(ans,root->right);
}
};
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> sta;
TreeNode *tmp = root;
while(!sta.empty() || tmp != nullptr){
while(tmp != nullptr){
ans.push_back(tmp->val);
sta.push(tmp);
tmp = tmp->left;
}
tmp = sta.top();sta.pop();
tmp = tmp->right;
}
return ans;
}
};
int main()
{
TreeNode root(1);TreeNode node2(2);TreeNode node3(3);
root.right=&node2;node2.left=&node3;
Solution s;
vector<int> ans = s.preorderTraversal(&root);
for(int x :ans)
cout<<x<<endl;
return 0;
}
今天也是爱zz的一天哦!