我坚持这个问题。我失败的边缘情况是给定节点(self)是树中最大的节点。我很感激任何解决问题的提示。
我提出的案例是当节点的权利为None时,我知道解决方案将是祖父母或无。
另一种情况是权利不是无。在这种情况下,我调用正确的子节点并找到最左边的节点,因为这将是大于起始自身节点的最小节点。
给定BSTNode对象,返回下一个顺序节点。
class BSTNode:
def __init__(self, left, right, parent):
self.left = left # BSTNode
self.right = right # BSTNode
self.parent = parent # BSTNode
def nextInorderNode(self):
如果self为1,则返回3
如果自己是3,则返回4
如果自己是4,则返回5
如果self为9,则返回None
我的解决方案:
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()
答案 0 :(得分:1)
如果你重写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()