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

如何使用Python在二叉树中插入数据?

凌和悦
2023-03-14

我有一个数据集是从

import numpy as np            
dataset = np.random.normal(50,10,100)

记录此数据集的min和max。让[min, max]作为根节点。然后它有100个点。让[min, min d)和[max-d, max](其中d=(max-min)/2)分别是左右子节点。继续这样做。当节点小于或等于5个点(在数据集中)时停止。如何找到每个节点的点数?

我已经用节点构造了原始树(1,2,3......从上到下,从左到右),现在我想插入每个节点的数据。我还编写了拆分每个区间的函数。它只需要一个递归算法来完成。但是如何将它们组合在一起呢?

import numpy as np
dataset = np.random.normal(50,10,100)
def split_L(l):
    d = (max(l)-min(l)) / 2
    print('max=', max(l))
    print('min=', min(l))
    print('d=', d)
    j = 0
    m = []

    for i in dataset:
        if i in l:
            j=j+1
    print('Number of points=',j)

    for k in l:
        if k < min(l)+d:
            m.append(k)

    while j > 5:
        return m
def split_R(l):
    d = (max(l)-min(l)) / 2
    print('max=', max(l))
    print('min=', min(l))
    print('d=', d)
    j = 0
    m = []

    for i in dataset:
        if i in l:
            j=j+1
    print('Number of points=',j)

    for k in l:
        if k >= max(l)-d:
            m.append(k)

    while j > 5:
        return m
class Node:
    def __init__(self,data):
        self.data = data
        self.left = None
        self.right = None

class Tree:
    def __init__(self):
        self.list = [self.root_node()]

    def root_node(self):
        root_node = Node(1)
        return root_node


    def add_node(self, data):
        new_node = Node(data)
        self.list.append(new_node)
        if len(self.list) % 2==0:
            self.list[len(self.list) // 2].left = new_node
        else:
            self.list[len(self.list) // 2].right = new_node

    def output_tree(self):
        for i in range(len(self.list)):
            print(self.list[i].data)


if __name__ == '__main__':
    tree = Tree()
    for i in range(2,100):
        tree.add_node(i)

    tree.output_tree()

共有1个答案

裴泰平
2023-03-14

一些建议。

  1. 您应该有一个manger类,因为数据集范围决定根节点,点的密度决定深度。当向数据集中添加新点时,树可能会完全改变
  2. 如果你不想在数据集中添加新的点,你的“插入数据”只意味着构造阶段,你不需要解析树的每一层,你只需要处理叶节点并为它们的祖先定义一个属性
  3. 你不必用这种方法构造原点树,你可以计算出排序数据集中每五个相邻点的最小长度,然后直接得到深度
 类似资料:
  • 二叉搜索树(BST)和二叉树(BT)中的插入有什么区别?我知道,在BST中,您将新节点的值与根进行比较,如果较小,则添加到其左侧,如果较大,则将其添加到根的右侧。BT的程序是否相同?如果没有,插入和移除的步骤是什么?

  • 到目前为止我的理解是: > (i)调用值=10的。由于root已经设置为50,如果条件为10<50,程序将进入第二个。 (ii)调用Root.left为10,节点值为2的递归insert函数。程序再次进入第二个if条件,条件为2<10。 (iii)再次调用Root.left为None,value为2的递归insert函数。现在程序进入first if条件,root获得值2。这将完成递归重复调用,程

  • 我最近完成了一个项目的二进制搜索树,我正在工作。很顺利,我学到了很多。然而,现在我需要实现一个常规的二叉树...出于某种原因,这让我难倒了。 我正在寻找一种方法来做我的InsertNode功能... 通常在BST中,您只需检查数据 有谁能帮我实现一个函数,只需将一个新节点从左到右不按特定顺序添加到二叉树中? 以下是我的BST插页:

  • 我目前正在学习使用java的树,在二叉树中插入项时出现了一些错误,我不知道为什么它不起作用 这是代码:树节点: 树类: 每当我添加一个项目,根仍然为空,没有右或左的项目,如果有人能帮助我,我会非常感激

  • 我试图在二叉树中插入节点,如果我用addNode(Node root)替换方法addNode(Node Node)代码运行良好。这是因为我在第一行声明了吗?请解释一下。addNode方法由于字数限制而不完整,否则它是完整的,运行良好。

  • 下面是一个二叉查找树,它有一个根节点、一个左节点和一个右节点。代码有效,但我想显示这个二叉查找树,这样我就可以看到图层中的每个节点…这是代码…