0
    def __init__(self, data):
        self.data = data
        self.left=None
        self.right= None

class binoryTree:
    maxi=float('inf')
    mini=-float('inf')
    def __init__(self):
        self.root=None

    def insert(self,root,data):
        if self.root is None:
            self.root=Node(data)
            print("root data values %s", self.root.data)
        else:
            print("root data values %s", self.root.data)
            if self.root.data>data:
                **if self.root.left is None:
                   self.root.left = Node(data)**
                else:
                    self.insert(self.root.left,data)
            else:   
                if self.root.right is None:
                    self.root.right = Node(data)
                else:
                    self.insert(self.root.right,data)

    def print_tree(self,root):
        if root is None:
            return
        self.print_tree(root.left)
        print("%d",root.data)
        print("----------")
        self.print_tree(root.right)

    def is_bst(self, root, mini, maxi):
        if root is None:
            return 0
        if root.data <mini and root.data > maxi:
            return 0
        return self.is_bst(root.left,mini,root.data) and self.is_bst(root.right,root.data, maxi)

t= binoryTree()
t.insert(t.root,50)
t.insert(t.root,4)
t.insert(t.root,1)
t.insert(t.root,8)
t.insert(t.root,100)
t.print_tree(t.root)

无法识别插入功能中的问题。无法理解为什么在插入第一个节点后无法进入粗体部分代码。

[preeti@oc1238606604 数据结构]

$ /usr/bin/env /usr/bin/python3 /home/preeti/.vscode/extensions/ms-python.python-2020.11.371526539/pythonFiles/lib/python/debugpy/launcher 41717 -- /home/preeti/桌面/code_playground/data_structures/isBst.py

根数据值 %s 50 个根数据值 %s 50 个根数据值 %s 50 个根数据值 %s 50 个根数据值 %s 50 个根数据值 %s 50 个根数据值 %s 50

递归超过错误,因为它一次又一次地调用插入。

4

1 回答 1

1

正如评论中所指出的,您混淆了self.rootand root。代码没有进入阻塞部分,因为您在这里检查的值self.root等于 50,但是您需要检查root作为参数传递的值。一个小问题是您正在使用%s%d不使用格式,,print空格后打印值,因此您应该使用类似print("root data values %s".format(root.data))print("root data values %s"%root.data)

修改插入代码 ->

    def insert(self,root,data):
        if self.root is None:
            self.root=Node(data)
            print("root data values %d"%self.root.data)
        else:
            print("root data values %s"%root.data)
            if root.data>data:
                if root.left is None:
                   root.left = Node(data)
                else:
                    self.insert(root.left,data)
            else:   
                if root.right is None:
                    root.right = Node(data)
                else:
                    self.insert(root.right,data)

于 2020-12-15T07:07:33.190 回答