数据结构与算法-求二叉树某个节点的前驱节点与后继节点

二叉树的后继节点

什么是二叉树的后继节点呢? 就是这颗二叉树中序遍历顺序中,当前节点的下一个节点称为这个当前节点的后继节点。

与之相反的是前驱节点,前驱节点,就是二叉树中序遍历的顺序中,当前节点的上一个节点。

如下图:

 

 

那么下面我们来看一道具体的面试题 : 


【题目】 现在有一种新的二叉树节点类型如下,在此节点类型的二叉树中找到一个节点的后继节点

class Node(object):
    """含有父节点属性的节点类"""
    def __init__(self, elem, lchild=None, rchild=None, parent=None):
        self.elem = elem
        self.lchild = lchild
        self.rchild = rchild
        self.parent = parent
    

注:该结构比普通二叉树节点结构多了一个指向父节点的parent指针。假设有一 棵Node类型的节点组成的二叉树,树中每个节点的parent指针都正确地指向 自己的父节点,头节点的parent指向None

 

下面我们来看看这题的思路是什么?

由题目可知,我们的节点类型很特殊,再结合中序遍历的特点是(左,中,右)那么找一个节点的后继节点会有如下两种情况:

情况1:当前节点有右子树

 那么针对这个情况,结合我们的中序遍历特点,总结出一个规律 : 如果当前节点有右子树,那么其后继节点为其右子树的最左节点

情况2:当前节点没有有右子树  

针对这种情况,那么我们就要用到题目给的条件了,每个节点都有个父节点的属性,我们能通过子节点找到父节点

那么其规律是:如果当前节点没有右子树,定义第一个指针指向当前节点,然后找其父节点,用第二个指针指向它,如果指针1所指的节点是指针2的左孩子,那该指针2节点就是其后继节点,如果不是其左孩子,那么指针1指向其父节点,原来的指针2也指向他的父节点(也就是指针1和指针2都往上调一格)直到指针1所指的节点是指针2节点的左孩子,那么指针2所指的节点就是其后继节点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值