二叉树的下一个结点

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

思路

这里主要是分情况讨论结点的情况。
情况1: 结点有右孩子
找到右子树里面的最左结点,返回
情况2:结点没有右孩子,这时候有2个细分情况。
情况2.1: 结点是父节点的左子树
返回父节点
情况2.2: 结点是父节点的右子树
向上搜 不停的找结点的父节点 直到找到结点A,A的 父结点 的 左结点 是A。
返回A的父节点

代码

# class TreeLinkNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None
class Solution:
    def GetNext(self, pNode):
        # write code here
        if pNode is None:
            return None
        #情况1: 结点有右孩子
        #找到右子树里面的最左结点,返回
        if pNode.right is not None:
            pNode = pNode.right
            while pNode.left is not None:
                pNode = pNode.left
            return pNode
        #情况2.1: 结点是父节点的左子树
        #返回父节点
        elif pNode.next is not None and pNode.next.left == pNode:
            return pNode.next
        #情况2.2: 结点是父节点的右子树
        # 向上搜 不停的找结点的父节点  直到找到结点A,A的 父结点 的 左结点 是A。
        # 返回A的父节点
        elif pNode.next is not None and pNode.next.right == pNode:
            while pNode.next is not None and pNode.next.left != pNode:
                pNode = pNode.next
            return pNode.next
        return None
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 思路: (1)若该节点存在右子树:则下一个节点为右子树最左子节点(如图节点B) (2)若该节点不存在右子树:这时分...
    杰伦哎呦哎呦阅读 251评论 0 1
  • 题目 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,...
    lqsss阅读 554评论 0 0
  • 按照中序排序,求二叉树的下一个结点。 分析下一个结点: (1)如果当前结点存在右结点, 那么它的下一个结点就是它的...
    BeijingIamback阅读 354评论 0 1
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,685评论 0 25
  • 愿能冻结在大雪中,结束这不温不火。
    鲸大宝阅读 207评论 0 0

友情链接更多精彩内容