首页 > 解决方案 > 我正在尝试从头开始在 python 中构建 BST RecursionError:比较中超出了最大递归深度

问题描述

我正在尝试从头开始构建树,但出现最大递归错误。请帮我找出错误。

首先,我创建了一个节点并使用 make_node 函数,我正在尝试构建树。然后在中序函数的帮助下,我试图在节点中打印数据。

class node:
    def __init__(self,data):
        self.data = data
        self.left = None;
        self.right = None;

class tree:
    def __init__(self):
        self.start = None;
    def make_node(self,data):
        if(self.start==None):
            self.start = node(data)
            print(self.start.data)
            return
        
        #temp = self.start
        if(self.start.data<data):
            if(self.start.left == None):
                print(self.start.left.data)
                self.start.left = node(data)
            else:
                self.start.left(self.make_node(data))
        elif(self.start.data>=data):
            print(self.start.right.data)
            if(self.start.right == None):
                self.start.right = node(data)
            else:
                self.start.right(self.make_node(data))
    
    def inorder(self):
        #temp2 = self.start
        if(self.start==None):
            return
        self.start = self.start
        self.inorder(self.start.left)
        print(self.start.data)
        self.inoder(self.start.right)
        

BST = tree()
BST.make_node(2)
BST.make_node(3)
BST.make_node(4)
BST.make_node(5)

BST.inorder()

你们能帮我找出我的错误吗?提前致谢。

标签: python-3.xalgorithmdata-structurestree

解决方案


我发现的错误:

1.不能这样调用函数: self.start.left(self.make_node(data))。因为self指的是树的对象,而不是节点的对象。对于引用 Node 对象,您可以作为参数传递。所以,我已经在你的代码中到处纠正了这个错误。

2.此外,您以相反的顺序使用了不等式,即根左侧的较大元素和右侧的较小元素......我在下面的代码中进行了更改。

节点类:

class node:
    def __init__(self,data):
        self.data = data
        self.left = None;
        self.right = None;

树类:

class tree:
    
    def __init__(self):
        self.start = None;
    
    def make_node(self,Node,data):
        
        if(Node == None):
            Node = node(data)
            if(self.start == None):
                self.start = Node
            return Node
        
        if(Node.data>data):
            Node.left = self.make_node(Node.left,data)
        elif(Node.data<=data):
            Node.right = self.make_node(Node.right,data)
            
        return Node
    
    def inorder(self,root):
        if(root==None):
            return
        self.inorder(root.left)
        print(root.data)
        self.inorder(root.right)
 

构建树并使用 inorder 函数:

BST = tree()
BST.make_node(BST.start,2)
BST.make_node(BST.start,3)
BST.make_node(BST.start,4)
BST.make_node(BST.start,5)

BST.inorder(BST.start)

推荐阅读