二叉树进阶应用之查找结点的后继结点

    一般我们讨论的二叉树的结点结构只有:结点值、左儿子、右儿子。

    但是如果在结点结构中加一个成员属性,指向结点的父节点。那么又会引出不少的变化。

    一:前继结点与后继结点

    与链表不同,链表的前继后继就是根据结点在链表中的位置的前一结点、后一结点得出的。但是树不同,结点的上一层与下一层都含有较多的结点,所以不能单纯地由上下层关系定义前继结点与后继结点。

    我们说的二叉树结点的前继结点、后继结点是:在中序遍历这棵二叉树的结果中,该结点的前一结点是它的前继结点、后一结点是后继结点。

 

    二:给出某一结点node,求node的后继结点(该树的结点包含父节点指针)【注:该题没有给出树的root结点】

    传统解法:由node的父节点不断往上,找到root结点,然后从root开始中序遍历树得到中序遍历结果,则中序遍历结果中node的后面一个结点就是后继结点。

    优化解法:从中序遍历的特性去寻找:左-根-右

                 中序遍历一个结点时,下一个结点有三种情况:1:如果当前结点有右结点,则下一个遍历的是右子树的最左结点

                                                                            2:如果当前结点无右结点,若它是父节点的左儿子,则下一遍历的是父节点

                                                                            3:如果当前结点无右结点,且它是父节点的右儿子,则所在子树遍历完了。向上寻找一个作为左儿子的祖先结点,那么下一遍历的就是该祖先结点的父节点;(一直找到根节点为止)

                                                                            如果上面三种情况都没找到,则该节点是树的最后一个结点,无后继结点。

转载于:https://www.cnblogs.com/ygj0930/p/6612987.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值