回 帖 发 新 帖 刷新版面

主题:[讨论]谁能帮忙解释一下

关于二叉树的先根次序周游

    书上原话:采用非递归算法实现先根次序周游的主要思路是:从二叉树根节点p开始,将p压入栈中;然后置p为当前二叉树的左子树,若左子树不为空,继续将左子树进栈,再进入其左子树,如此重复进行,直到p为空时,从栈中弹出栈顶元素赋值给变量p,访问后置p为它右子树。重复执行上述过程,知道当p为空并且栈也为空时,周游结束。


本人一字不差,标点也不差的写下来了,可是由于自己比较笨,看不明白书上要说的是什么意思,请高手给翻译一下!

回复列表 (共1个回复)

沙发

我觉得你画个图出来会比较容易理解。
总之遍历的原则是: 
              1.遇到节点先访问,再将这个节点压入堆栈中
              2.判断这个刚刚访问的节点是否存在左子树。
                       若存在:则将左子树节点作为当前节点 返回到 1
                        若不存在:则判断是否存在右子树 
                                           若存在右子树:将右子树作为当前节点 返回到 1
                                           若不存在右子树:说明该节点为叶子节点,弹栈,  将    弹出的节点做为当前节点,访问它的右子树,并将右子树作为当前节点,再回到 1

我来回复

您尚未登录,请登录后再回复。点此登录或注册