二叉树遍历的递归算法和非递归算法我们当然应该很熟悉了,不过还有另外一种遍
历方式,就是增加了树的构造,然后不允许递归或是用到栈进行遍历,如线索树或者是
有父母节点的二叉树等等等等。这样的遍历就需要我们找到一个节点的后继,同样如果
有更变态的题要求我们找一个节点的前驱,也和找后继是一个类型,下面我就关于三种
遍历方法的前驱和后继作一讨论和总结,让大家在考试的时候得心应手。也请高手给与
指正
一、前序遍历
找后继:
1、若有左子女,则后继是左子女;
2、若无左子女,有右子女,则后继是右子女;
3、若既无左子女,又无右子女,则是一片叶子;再讨论:
a若是其父母的左子女,且父母有右子女,则后继是父母的右子女。
b若是其父母的左子女,且父母无右子女;
c若是其父母的右子女。
b,c都表示这是某个节点的左子树前序遍历的最后一个节点,则需要找第一
个有 右子树的“左祖先”(这个是我自己定义,即找第一个使得当前节点在这
个祖先的左 子树上),然后后继就是这个祖先的右子女。
如何找这个左祖先?即
while((p->parent->rchild==NULL||p->parent->rchild==p)&&p!=NULL)
p=p-&g
关于二叉树遍历的前驱后继规则
最新推荐文章于 2023-01-26 16:51:40 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)