Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类二进制搜索树Python_Python_Class_Binary Search Tree - Fatal编程技术网

类二进制搜索树Python

类二进制搜索树Python,python,class,binary-search-tree,Python,Class,Binary Search Tree,我是Python新手,在HackerRank中遇到了一个老问题,它定义了一个二叉树。我在上一节(和下一节)回顾了这段视频,试图理解下面代码中发生的事情,但我仍然没有完全理解到底发生了什么 我理解初始化(self)的作用,但我不确定信息的属性是什么。我也不明白为什么self.left=None,self.right=None,self.level=None 在第二个类BinarySearchTree中,有一个没有属性的init,我也不理解self.root=None 尽管我不理解下面的大部分代

我是Python新手,在HackerRank中遇到了一个老问题,它定义了一个二叉树。我在上一节(和下一节)回顾了这段视频,试图理解下面代码中发生的事情,但我仍然没有完全理解到底发生了什么

  • 我理解
    初始化(self)
    的作用,但我不确定
    信息的属性是什么。我也不明白为什么
    self.left=None
    self.right=None
    self.level=None
  • 在第二个类
    BinarySearchTree
    中,有一个没有属性的init,我也不理解
    self.root=None
尽管我不理解下面的大部分代码,但我认为如果有人能解释为什么这个人设置了self.\uuuuuuuuuuuu=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
类节点:
定义初始化(自我,信息):
self.info=info
self.left=无
self.right=无
self.level=无
定义(自我):
返回str(self.info)
类二进制搜索树:
定义初始化(自):
self.root=None
def创建(自我,val):
如果self.root==无:
self.root=节点(val)
其他:
当前=自根
尽管如此:
如果valcurrent.info:
如果当前为。右:
当前=当前。右
其他:
current.right=节点(val)
打破
其他:
打破

如果您尝试将树结构绘制为一组带有某些值的圆,您将得到如下结果:

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

类“BinarySearchTree”表示一棵树作为一个整体,并将当前根节点(图像上的顶部节点)保留在相应的“root”属性中。树的开头是空的,因此“root”属性等于“None”


希望有帮助

我想我明白你写的。当我在没有任何东西的情况下运行代码时,比如
print(2)
,我会得到
AttributeError:“NoneType”对象没有属性“info”。
但是当我
print(root.info)
时,我仍然会得到根的正确值,并且上面有相同的错误。类的定义方式是否有问题?不确定print(2)的含义,但看起来您正在尝试访问尚未创建的类实例的属性。尝试以下操作:打印(如果root不是None-other“N/A”,则为root.info)。