在二叉搜索树中继承

时间:2017-08-05 16:21:47

标签: python binary-search-tree

这是一个常见的算法问题。我试图在二叉搜索树中找到inorder后继者。这是我的代码

def inorderSuccessor(self, root, p):
        """
        :type root: TreeNode
        :type p: TreeNode
        :rtype: TreeNode
        """
        # if Node has a right child, go all the way down
        if p.right:
            curr = p
            while curr.left:
                curr = curr.left
            return curr
        # first ancestor whose left child the node is
        ans = None
        curr = root
        while curr is not p:
            if curr.val < p.val:
                curr = curr.right
            else:
                ans = curr
                curr = curr.left
        return ans

问题是,当p是树中的最高节点时,这不起作用。我一直在试着如何处理这个边缘案件。

1 个答案:

答案 0 :(得分:0)

您可以在BST类中实现以下方法

def InOrderSucc(self,childNode):
    if(self.search(childNode)):
        if not (self.data == childNode):
            return(self.right.InOrderSucc(childNode))
        else:
            if(self.right):
                return(self.right.data)
            else:
                return None
    else:
        return False

其中childNode是您要查找其InOrder后继者的节点,请注意InOrder后继者将始终是正确的子代。