题目

思路
前序遍历的过程是:根节点——左子树——右子树
所以大概过程如下:
- 输出根节点的值
- 压入右子树的根节点
- 遍历左子树
代码如下:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> v;
stack<TreeNode*> s;
TreeNode* tre = root;
while (tre || !s.empty()) {
while (tre) {
v.push_back(tre->val);//先访问根节点
s.push(tre->right);//将右子树压入栈中最后访问
tre = tre->left;//开始遍历左子树
}
tre = s.top();//当左子树遍历完,从栈中弹出右子树开始遍历右子树
s.pop();
}
return v;
}
};
总结
前序遍历的迭代算法关键在于:设置一个栈,每次将右子树的根节点压入栈中,当遍历完根节点和左子树,便从栈中弹出右子树开始输出右子树
本文详细介绍了二叉树前序遍历的迭代算法实现,通过使用栈来辅助遍历过程,首先访问根节点,然后依次遍历左子树和右子树,提供了具体的C++代码示例。
490

被折叠的 条评论
为什么被折叠?



