码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-05-22 00:09:07      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:div   元素   判断   oid   stack   turn   并且   public   出栈   

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;
    }
};

 

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

标签:div   元素   判断   oid   stack   turn   并且   public   出栈   

原文地址:https://www.cnblogs.com/simplepaul/p/12934351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!