类二进制搜索树Python

时间:2019-03-21 20:13:11

标签: python class binary-search-tree

我是Python的新手,在HackerRank中遇到了一个老问题,该问题定义了二进制树。我在classes and instances(和下一个)上观看了此视频,以尝试了解下面的代码中发生的事情,但我仍然不完全了解正在发生的事情。

  • 我了解__ init __(self, ...)的角色,但不确定info具有什么属性。我也不明白为什么self.left = Noneself.right = Noneself.level = None
  • 在第二堂课BinarySearchTree中,有一个没有属性的初始化,我也不理解self.root = None

即使我不理解下面的大多数代码,我认为如果有人可以解释为什么设置self.____= None的原因,那将有助于我理解如何定义二叉搜索树。

class Node:
    def __init__(self, info): 
        self.info = info  
        self.left = None  
        self.right = None 
        self.level = None 

    def __str__(self):
        return str(self.info) 

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

    def create(self, val):  
        if self.root == None:
            self.root = Node(val)
        else:
            current = self.root

            while True:
                if val < current.info:
                    if current.left:
                        current = current.left
                    else:
                        current.left = Node(val)
                        break
                elif val > current.info:
                    if current.right:
                        current = current.right
                    else:
                        current.right = Node(val)
                        break
                else:
                    break

1 个答案:

答案 0 :(得分:1)

如果您尝试将树形结构绘制成一堆带有一些内部值的圆,您将得到类似的东西:

Binary tree

“信息”属性将包含圆圈内的值。一棵二叉树的每个节点最多可以有两个孩子,这就是'left'和'right'属性的用途。如果'left'属性为'None',则基本上意味着左侧还没有子节点(就像图像上的节点16一样)。如果创建新节点,通常不希望它有任何子节点,这就是为什么默认情况下'left'和'right'属性为'None'的原因。

类'BinarySearchTree'整体上表示一棵树,并将当前的根节点(图像上的顶部节点)保留在相应的'root'属性中。一开始树是空的,所以'root'属性等于'None'。

希望有帮助!