当前位置: 首页 > 知识库问答 >
问题:

使用Python理解二叉搜索树插入

潘宝
2023-03-14
class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None


def insert(root, node):
    if root is None:
        root = node
        return root
    if node.value < root.value:
        root.left = insert(root.left, node)
        print("left: " + str(root.left.value))
    if node.value > root.value:
        root.right = insert(root.right, node)
        print("right: " + str(root.right.value))
    return root


root = Node(50)

insert(root, Node(10))
insert(root, Node(2))
insert(root, Node(80))
insert(root, Node(15))
insert(root, Node(60))
insert(root, Node(90))
left: 10
left: 2
left: 10
right: 80
right: 15
left: 10
left: 60

right: 80
right: 90
right: 80

到目前为止我的理解是:

>

  • 插入(根,节点(10))

    (i)调用值=10的__init__。由于root已经设置为50,如果条件为10<50,程序将进入第二个。

    (ii)调用Root.left为10,节点值为2的递归insert函数。程序再次进入第二个if条件,条件为2<10。

    (iii)再次调用Root.left为None,value为2的递归insert函数。现在程序进入first if条件,root获得值2。这将完成递归重复调用,程序执行下一个打印语句print(“left:”+str(root.left.value)),该语句打印2。

    (iv)现在,正如预期的那样,程序将第三个if条件计算为false,并成功调用return。
    但是,在开始insert(root,Node(80))之前,它再次返回到第二个if条件中的print语句,并打印一个10。
    我没有得到这个,那为什么在完成之后(或者不是?)函数调用它会再次返回到print语句?

  • 共有1个答案

    谷良弼
    2023-03-14

    当插入节点2时,它会在第二个if语句中运行两次,正如您所说的:

    insert(root, Node(2)) -> root being Node 50
    insert(root, Node(2)) -> root being Node 10
    

    因此,当递归步骤结束时,将运行两个print语句,但顺序相反。这意味着第一打印将示出节点10的左侧(插入的节点2),第二打印将示出节点50的左侧(节点10)

    您可以将上面的代码可视化为一个堆栈,因此在算法结束之前,所有的东西都需要执行,最上面的东西将首先执行。

     类似资料:
    • 我搜索了一下,但没有找到这个问题的答案... 我构建了一个非二叉树,因此每个节点可以有任意数量的子节点(我认为称为n元树) 为了有助于搜索,我在构建树的时候给了每个节点一个编号,这样每个节点的子节点会更大,它右边的所有节点也会更大。 像这样的东西: 这样我就有更多的时间进行搜索 当我想插入节点时,问题就来了。如果我想在除了结尾以外的任何地方插入节点,这个模型就不起作用了。 我想了几种方法可以做到这

    • 二叉搜索树(BST)和二叉树(BT)中的插入有什么区别?我知道,在BST中,您将新节点的值与根进行比较,如果较小,则添加到其左侧,如果较大,则将其添加到根的右侧。BT的程序是否相同?如果没有,插入和移除的步骤是什么?

    • 我试图通过这个链接BinarySearchTree来理解BST。但我在其他部分感到困惑 我不能理解其他部分,其中左大部分节点的右子树被找到,然后分配到该节点。但在这里,该节点都不为空,并且返回右节点,这对我来说是没有意义的。我希望这是一个正确的实现。有人能帮我了解一下这里发生了什么吗。

    • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:

    • 这里有问题 二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,而小于该节点右子树中所有节点的值。 编写一个函数,根据使用的时间有效地检查给定的二叉搜索树是否包含给定的值。

    • 树的特征和定义 树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树: 树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。 每个节点可以有多个子节点(children),而该节点是相应子节点的父节点(parent)。比如说,3,5是6的子节点,6是3,