python - 调试Python : Binary Search Tree (Objects bug)

标签 python object binary-tree

所以我在这个程序中遇到了一个小错误,但我真的不知道如何修复它,如果有人能帮助我指出它在哪里,我将非常感激。所以基本上,第一个函数将排序数组转换为平衡二叉搜索树,第二个函数返回给定节点的树的高度。当我编译该程序时,出现如下错误: enter image description here

我试图打印出“aNode”对象来测试,我惊讶地发现它一开始指向一个 Node 对象,但后来又指向一个 Tree 对象(?),我真的很困惑,真的不知道不知道如何调试这个。非常感谢您的帮助。

enter image description here

class Node(object):
    def __init__(self, data):
        self.data = data
        self.lChild = None
        self.rChild = None

class Tree(object):
    def __init__(self):
        self.root = None
    # create a balanced binary search tree from a sorted list
    def create_tree (self, a_list):
       if (len(a_list) <= 0): return None
       mid = (len(a_list))//2 # find the mid value of the sorted array & make it root
       self.root = Node(a_list[mid])
       self.root.lChild = self.create_tree(a_list[:mid])
       self.root.rChild = self.create_tree(a_list[mid+1:])
       return self

    def get_height (self, aNode):
       if (aNode == None):
          return -1
       else:
          print(aNode) # I DID MY TEST HERE WHERE IT FIRST PRINT "NODE OBJECT", BUT PRINT "TREE OBJECT" LATER AND CAUSE THE PROGRAM TO FAIL
          rHeight = self.get_height(aNode.rChild)
          lHeight = self.get_height(aNode.lChild)
          return (1+rHeight) if rHeight > lHeight else (1+lHeight)

def main():
    new_tree = Tree().create_tree([1,9,11,17])
    new_tree.get_height(new_tree.root)
 main()

非常感谢!

最佳答案

问题是您每次都用新节点覆盖 self.root 。因此,在递归调用中的每个级别,您都将使用新的空节点重置 Tree 对象的 self.root 。

对代码进行一些小的更改应该可以解决该问题。还在 main 中的 get_height() 调用中添加了一个打印,因为它只返回一个整数,并且您没有将其分配给任何东西。

class Node(object):
    def __init__(self, data):
        self.data = data
        self.lChild = None
        self.rChild = None

class Tree(object):
    def __init__(self, a_list):
        self.root = self.create_tree(a_list)

    # create a balanced binary search tree from a sorted list
    def create_tree (self, a_list):
       if (len(a_list) <= 0): return None
       mid = (len(a_list))//2 
       root = Node(a_list[mid])
       root.lChild = self.create_tree(a_list[:mid])
       root.rChild = self.create_tree(a_list[mid+1:])
       return root

    def get_height (self, aNode):
       if (aNode == None):
          return -1
       else:
          print(aNode) 
          rHeight = self.get_height(aNode.rChild)
          lHeight = self.get_height(aNode.lChild)
          return (1+rHeight) if rHeight > lHeight else (1+lHeight)

def main():
    new_tree = Tree([1,9,11,17])
    print(new_tree.get_height(new_tree.root))

关于python - 调试Python : Binary Search Tree (Objects bug),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876609/

相关文章:

python - 在 Django 中使用多个数据库,让另一个数据库包含不是由任何模型创建的表

python - python 或 pyspark 中的条件语句

JavaScript 类和调用上下文

algorithm - 如果每个节点都是其下所有节点的权重之和,则找到树中最大权重的节点。

c - 我的二分搜索(在 C 语言中工作)不断出现段错误

python - 拆分管道分隔的系列,按单独的系列分组,并返回新列中每个拆分值的计数

javascript - 使用 Int 索引迭代对象 javascript

javascript - 单词中出现频率最高的字符串

使用随机指针克隆二叉树

python pandas.loc 找不到行名称 : KeyError