二叉树?前序遍历!
题目:
给定一个二叉树,返回它的 前序 遍历。
例子:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
题目分析
前序遍历
- 根结点
- 左子树
- 右子树
递归三行解决
不使用递归? 栈 保存结点信息 即可!
解题思路
变量 | 作用 |
---|---|
stack < Treenode * > s | 保存结点信息 |
TreeNode * temp | 当前遍历的结点\ |
过程:
当 s 非空
取出栈顶元素作为当前结点 temp
如果当前结点 右子树节点 非空 ==> 入栈
如果当前结点 左子树节点 非空 ==> 入栈
(栈后入先出 – 所以 先加右结点 再加左节点)
代码如下:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
if (!root) return {};
vector<int> ans;
stack<TreeNode*> s{{root}};
while (!s.empty())
{
TreeNode* temp;
temp = s.top();
s.pop();
ans.push_back(temp->val);
if (temp->right) s.push(temp->right); //右节点入栈
if (temp->left) s.push(temp->left); //左结点入栈
}
return ans;
}
};