美文网首页剑指offer- python实现
面试题8:二叉树的下一个节点

面试题8:二叉树的下一个节点

作者: 不会编程的程序猿甲 | 来源:发表于2020-01-30 15:18 被阅读0次

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

    解题思路:
    首先需要弄清楚这个节点的情况,然后分别进行应对。
    ① 如果该节点有右子树,下一节点为其右子树的最左节点;
    ②如果该节点没有右子树,且为父节点的左子树,那么下一节点为其父节点;
    ③如果该节点没有右子树,且为父节点的右子树,则需要一直向上遍历,直到某一节点为其父节点的左子树,下一节点则为其父节点,否则没有下一节点。

    代码:

    class Solution:
        def GetNext(self, pNode):
            # write code here
            if not pNode:
                return
            elif pNode.right != None:    #如果该节点有有右子树,下一节点为右子树的最左节点
                pNode = pNode.right
                while pNode.left != None:
                    pNode = pNode.left
                return pNode
    
            elif pNode.next != None and pNode.next.left == pNode: #如果该节点没有右子树并且是其父节点的左节点,返回其父节点
                return pNode.next
    
            else:
                #如果该节点没有右子树并且是其父节点的右节点,一直向上遍历直到找到一个节点是其父节点的左节点
                while pNode.next != None and pNode.next.left != pNode: 
                    pNode = pNode.next
                return pNode.next
    

    相关文章

      网友评论

        本文标题:面试题8:二叉树的下一个节点

        本文链接:https://www.haomeiwen.com/subject/srinactx.html