【问题标题】:Binary search tree: insert operation二叉搜索树:插入操作
【发布时间】:2017-05-30 02:30:40
【问题描述】:

我有以下实现 BST 的代码。但是当我尝试通过调用 insert 函数插入元素时,它只打印出 10 和 15。有人可以提供建议/更正吗?

class Node:
    def __init__(self,val):
        self.rightchild = None
        self.leftchild = None
        self.root = None
        self.value=val

    def insert(self,data):
        if self.value == data:
            return False

        elif self.value > data:
            if self.leftchild:
                return self.leftchild.insert(data)
            else:
                self.leftchild = Node(data)
                return True
        else:
            if self.rightchild:
                return self.rightchild.insert(data)
            else:
                self.rightchild = Node(data)
                return True

    def find(self,data):
        if self.value == data:
            return True
        elif self.value > data:
            if self.leftchild:
                return self.leftchild.find(data)
            else:
                return False
        else:
            if self.rightchild:
                return self.rightchild.find(data)
            else:
                return False

    def inorder(self):        
        if self.root:
            return self.leftchild.inorder()
        print(str(self.value))
        if self.rightchild:
            return self.rightchild.inorder()

class BST:    
    def __init__(self):
        self.root=None

    def insert(self,data):
        if self.root:
            return self.root.insert(data)
        else:
            self.root = Node(data)
            return True

    def find(self,data):
        if self.root:
            return self.root.find(data)
        else:
            return False

    def inorder(self):
        if self.root:
            self.root.inorder()

bst = BST()
bst.insert(10))
bst.insert(5)
bst.insert(15)
bst.insert(8)
bst.inorder()

【问题讨论】:

    标签: python python-3.x binary-search-tree


    【解决方案1】:

    Node#inorder 中,您有一个错字。第一行应该是

    if self.leftchild:
    

    另外,你过早地回来了。不要在inorder 中使用return,因为这种方法是打印,而不是计算任何东西。改写为:

    def inorder(self):
       if self.leftchild:
           self.leftchild.inorder()
       print(str(self.value))
       if self.rightchild:
            self.rightchild.inorder()
    

    进行这些修复后,我得到了预期的答案:

    $ python3 bst.py
    5
    8
    10
    15
    

    【讨论】:

    • 太棒了!谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多