在二进制搜索树中解决下一个有序节点的麻烦

时间:2017-10-12 21:03:45

标签: python binary-search-tree

我坚持这个问题。我失败的边缘情况是给定节点(self)是树中最大的节点。我很感激任何解决问题的提示。

我提出的案例是当节点的权利为None时,我知道解决方案将是祖父母或无。

另一种情况是权利不是无。在这种情况下,我调用正确的子节点并找到最左边的节点,因为这将是大于起始自身节点的最小节点。

给定BSTNode对象,返回下一个顺序节点。

enter image description here

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()

1 个答案:

答案 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()