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

如何使用Python在二叉树中插入数据?,python,recursion,data-structures,binary-tree,Python,Recursion,Data Structures,Binary Tree,我有一个从 import numpy as np dataset = np.random.normal(50,10,100) 记录此数据集的最小值和最大值。 设[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)
记录此数据集的最小值和最大值。 设[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()