二叉树的先序遍历-非递归实现

Posted simplepaul

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的先序遍历-非递归实现相关的知识,希望对你有一定的参考价值。

class Solution {
public:
    void preorderTraversal(TreeNode* root) {
        //1.先逐个访问左路结点,并将其入栈
        //2.再访问栈顶元素的右子树
        
        stack<TreeNode*> helper;
        TreeNode* cur=root;
        //只有cur为空,并且栈空,说明所有元素访问完
        while(cur || !helper.empty())
        {
           while(cur){              //  左路结点入栈
                cout << cur->val;
                helper.push(cur);
                cur=cur->left;
           }
            //来到这左路结点已入栈
            
            TreeNode* right=helper.top()->right;//栈顶的右子树
            helper.pop();//弹出栈顶
            cur=right;//将右子树赋给cur上去继续判断(cur是当前结点的右子树,它是可能为空的,当它为空时,继续取下一个栈顶的右子树,否则要将其赋给cur,再次
            //当做关键结点,即左路结点入栈,取栈顶,访问右子树...)
        }
        return;
    }
};

 

以上是关于二叉树的先序遍历-非递归实现的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的先序遍历-非递归实现

创建二叉树非递归完成对二叉树的先序和后序遍历并遍历输出每一层的结点数查找结点P 和结点Q的最近共同祖先

用递归和非递归方式实现二叉树的先序中序后序遍历

二叉树的遍历实现

Java实现二叉树的创建递归/非递归遍历

二叉树的非递归遍历