剑指offer--面试题58:二叉树的下一个结点

本文介绍了一种算法,用于确定给定二叉树中任一节点进行中序遍历时的下一个节点。该算法考虑了节点的右子树、父节点以及节点在其父节点中的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

python实现:

# -*- coding:utf-8 -*-
# class TreeLinkNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None
class Solution:
    """
    1.如果当前节点有right,那么next节点是其右子树的最左边的节点
    2.如果当前节点没有right,但他是其父亲的left,那么next节点是其父亲
    3.如果当前节点没有right,但他是其父亲的right,那么next节点是其父亲开始再往上方找,
    直到找到某个节点是其父亲的left,那么这个父亲节点就是所求next,如果没有这样的节点,
    这next为None
    """
    def GetNext(self, pNode):
        # write code here
        if pNode is None:
            return None
        if pNode.right:
            p = pNode.right
            while p.left:
                p = p.left
            return p
        else:
            if pNode.next is None:#没有父节点
                return None
            else:
                if pNode == pNode.next.left:
                    return pNode.next
                elif pNode == pNode.next.right:
                    p = pNode.next
                    while p and p.next:
                        if p==p.next.left:
                            return p.next
                        else:
                            p = p.next
                    return None


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值