【问题标题】:Inorder successor in a binary search tree二叉搜索树中的中序后继
【发布时间】:2017-08-05 16:21:46
【问题描述】:

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

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 是树中的最高节点时,这不起作用。我一直在为如何让这个边缘案例运转而摸不着头脑。

【问题讨论】:

  • 你是不是要实现中序树遍历?
  • Nope 中序遍历的复杂度为 O(n)。假设树是平衡的,我试图找到 O(log n) 复杂度的有序后继。
  • 您的意见是什么?您的实际/预期输出是多少?添加这些帮助。
  • if p.right 之后你设置了curr = p 但你真的想要curr = p.right

标签: python binary-search-tree


【解决方案1】:

您可以在 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 Successor 的 Node,注意 InOrder Successor 将始终是正确的 Child。

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2014-06-11
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多