题目
思路
前序遍历的过程是:根节点——左子树——右子树
所以大概过程如下:
- 输出根节点的值
- 压入右子树的根节点
- 遍历左子树
代码如下:
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;
}
};
总结
前序遍历的迭代算法关键在于:设置一个栈,每次将右子树的根节点压入栈中,当遍历完根节点和左子树,便从栈中弹出右子树开始输出右子树