前言
我们之前学习过用递归解决二叉树的前序,中序,后序。
下面我们将用非递归,也就是遍历的方法对二叉树进行遍历
一、前序遍历
我们要解决这个问题最重要的就是用另一个角度看待这颗树
以下面这棵树为例子
我们把看成为: 左路节点和左路节点的右子树
借助栈来实现
我们进行遍历,前序:根 右子树 左子树
🌟8,3,1入栈一直到nullptr,同时我们可以进行访问,这就是根
🌟取栈顶1元素,访问这个元素的右子树。由于右子树为nullptr,没有节点,继续遍历
🌟取栈顶元素3,遍历3的右子树
🌟3的右子树,根6入栈。访问左子树,4入栈.
🌟取栈顶元素4,访问4的右子树,右子树没有节点,继续遍历。
🌟下面也是同样的逻辑,遍历右子树,进行入栈。取栈顶元素进行,在遍历它的右子树
代码
vector<int> preorderTraversal(TreeNode* root)
{
vector<int>v;
stack<TreeNode*>st;
TreeNode*cur=root;
while(cur||st.size()!=0)
{
//访问左路节点
while(cur)
{
v.