Python 解决二叉搜索树中的下一个顺序节点时遇到问题
我被这个问题困住了。我失败的边缘情况是给定节点(self)是树中最大的节点。如果能给我一些提示来解决这个问题,我将不胜感激 我提出的情况是,当节点的右边是None时,我知道解决方案将是祖父母或None 另一种情况是,权利不是零。在这种情况下,我调用右边的子节点并找到最左边的节点,因为它将是比开始的self节点大的最小节点 给定BSTNode对象,返回下一个顺序节点 如果self为1,则返回3 如果self为3,则返回4 如果self为4,则返回5 如果self为9,则不返回任何值 我的解决方案:Python 解决二叉搜索树中的下一个顺序节点时遇到问题,python,binary-search-tree,Python,Binary Search Tree,我被这个问题困住了。我失败的边缘情况是给定节点(self)是树中最大的节点。如果能给我一些提示来解决这个问题,我将不胜感激 我提出的情况是,当节点的右边是None时,我知道解决方案将是祖父母或None 另一种情况是,权利不是零。在这种情况下,我调用右边的子节点并找到最左边的节点,因为它将是比开始的self节点大的最小节点 给定BSTNode对象,返回下一个顺序节点 如果self为1,则返回3 如果self为3,则返回4 如果self为4,则返回5 如果self为9,则不返回任何值 我的解决方案
class BSTNode:
def __init__(self, left, right, parent):
self.left = left # BSTNode
self.right = right # BSTNode
self.parent = parent # BSTNode
def find_left_most(self):
if (self == None):
return self
next = self
while (next != None):
if (next.left == None):
return next
next = next.left
def nextInorderNode(self):
if self.right == None:
parent = self.parent
if (parent.left == self):
return parent
else:
curr_node = parent.right
grand_parent = parent.parent
return grand_parent
else:
child = self.right
return child.find_left_most()
如果重写
nextInorderNode
沿树向上走,直到找到self
位于的左侧的节点,我认为这将为您提供所需的结果:
def nextInorderNode(self):
if self.right is None:
curr_node = self
parent = curr_node.parent
while parent and parent.left != curr_node:
curr_node = parent
parent = curr_node.parent
return parent
child = self.right
return child.find_left_most()
def nextInorderNode(self):
if self.right is None:
curr_node = self
parent = curr_node.parent
while parent and parent.left != curr_node:
curr_node = parent
parent = curr_node.parent
return parent
child = self.right
return child.find_left_most()