这是一个常见的算法问题。我试图在二叉搜索树中找到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是树中的最高节点时,这不起作用。我一直在试着如何处理这个边缘案件。
答案 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后继者将始终是正确的子代。