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