原题链接:144. 二叉树的前序遍历
思路:
使用迭代法来进行前序遍历
递归的本质就是使用栈来完成相应操作
迭代法中使用栈来模拟递归操作
先创建结点类型的栈,然后创建一个用于存放结点val的容器
1.先将root结点push进栈内
2.如果栈不为空,则先获取栈顶结点元素,再将栈顶结点弹出
3.判断获取的元素是否为空,空则continue退出循环,不为空则将结点值push进容器中
4.迭代法的前序遍历为:中左右,又因为栈是先进后出,所以,先将结点的右子树push进栈,再将左子树push进栈
5.最后返回容器即可
全代码:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
//迭代法 用栈模拟递归,用于存放结点
stack<TreeNode*> stackA;
//用于存放结点的val
vector<int> it;
//将根结点push进栈内
stackA.push(root);
while(!stackA.empty())
{ //获取栈顶结点元素
TreeNode* Node = stackA.top();
//将栈顶元素弹出
stackA.pop();
//如果栈顶结点是空的,那么就退出循环
if(Node == NULL) continue;
//栈顶结点不为空,将值push进数组内
it.push_back(Node ->val);
//因为栈是先进后出,所以先push右子树再push左子树
stackA.push(Node ->right);
stackA.push(Node ->left);
}
//容器内存储的就是先序遍历的结点的值
return it;
}
};