二进制搜索树实现错误

时间:2017-11-29 14:55:31

标签: python search tree binary-tree binary-search-tree

在下面的二进制搜索树(初始)实现中,我正在创建一个对象并尝试调用insert方法来添加节点。输出是错误的,任何人都可以告诉我为什么以及如何解决它?

代码:

class Node():
            def __init__(self,data):
            #attributes are: node data, left node data and right node data
                        self.data=data
                        self.left=None
                        self.right=None

            def print_nodes(self):
                        print(self.data)

            def insert(self,data):
                        if self.data:
                                    if data<self.data: #if the data passed into insert, is less the existing node
                                                if self.left is None: #if the left node is empty...
                                                            self.left=Node(data) #call the Node with t he data given - inserted into left node
                                                else:
                                                            self.left.insert(data)
                                    elif data>self.data:
                                                 if self.right is None:
                                                             self.right=Node(data)
                                                 else:
                                                             self.right.insert(data)
                                    else:
                                                            self.data=data


root=Node(8)
root=Node(3)
root.print_nodes()
root.insert(10)
root.insert(1)
root.print_nodes()

OUTPUT(LOGIC ERROR) 我希望它打印出二叉树中的所有节点,例如8然后是3,但它没有。有没有办法有效/简单地做到这一点?

    3
    3
    >>> 

另请注意,只需调用此功能,即可生效并打印8

root=Node(8)
root.print_nodes()

但是

root=Node(8)
root.Insert(3)
root.print_nodes()

的输出为:

8
8

更新

我还尝试根据下面的有用评论添加更高级的打印方法(print_tree)。它现在打印出更多......但输出仍然令人费解。

更新了更新了print_tree方法的代码

class Node():
            def __init__(self,data):
            #attributes are: node data, left node data and right node data
                        self.data=data
                        self.left=None
                        self.right=None

            def print_tree(self):
                        if self.left:
                                    self.left.print_tree()
                        print(self.data)
                        if self.right:
                                    self.right.print_tree()


            def insert(self, data):
                    if self.data:
                        if data < self.data:
                            if self.left is None:
                                self.left = Node(data)
                            else:
                                self.left.insert(data)
                        elif data > self.data:
                            if self.right is None:
                                self.right = Node(data)
                            else:
                                self.right.insert(data)
                    else:
                        self.data = data           



root=Node(8)
root.print_tree()
root.insert(3)
root.print_tree()
root.insert(5)
root.print_tree()

输出:

8
3
8
3
5
8
>>> 

0 个答案:

没有答案