python-7.二叉树的下一个节点

题目描述:

  • 给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。

解题思路:

  • 根据中序遍历的特点:

    • 若该节点有右子树,则下一个节点为右子树最左边的节点
    • 若该节点无右子树:
    • 若该节点是父节点的左节点,则下一个节点为父节点
    • 若该节点是父节点的右节点,则下一个节点为遍历父节点找到一个节点是其父节点左孩子的节点
    class BinaryTreeNode:
    def __init__(self, val):
        self.val = val
        self.LeftNode = None
        self.RightNode = None
        self.ParentNode = None
    class Solution:
    def __init__(self, BinaryTree, Node):
        self.BinaryTree = BinaryTree
        self.Node = Node
    def findNext(self):
        if self.BinaryTree is None:
            return None
        # 存在右子树
        if self.Node.RightNode is not None:
            nextNode = self.Node.RightNode
            while nextNode.LeftNode != None:
                nextNode = nextNode.LeftNode
            return nextNode
        else:
            # 如果是父节点的左节点
            if self.Node.ParentNode.LeftNode == self.Node:
                return self.Node.ParentNode
            # 如果是父节点的右节点
            else:
                nextNode = self.Node.ParentNode
                while nextNode != None:
                    if nextNode.ParentNode.LeftNode == nextNode:
                        return nextNode.ParentNode
                    nextNode = nextNode.ParentNode
                return None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值