【问题标题】:How can I insert data in a binary tree with Python?如何使用 Python 在二叉树中插入数据?
【发布时间】:2021-01-19 13:58:01
【问题描述】:

我有一个从

生成的数据集
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()

【问题讨论】:

    标签: python recursion data-structures binary-tree


    【解决方案1】:

    一些提示。

    1. 你应该有一个管理器类,因为数据集范围决定根节点,点的密度决定深度。当您将新点添加到数据集中时,树可能会完全改变。
    2. 如果您不想将新点添加到数据集中,您的“插入数据”仅表示构建阶段,您不必解析树的每一层,您只需处理叶节点并定义他们祖先的财产。
    3. 这种方式你不必构造源树,你可以计算一个排序后的数据集中每五个相邻点的最小长度,然后你可以直接得到深度

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2016-01-17
      • 2015-02-13
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      相关资源
      最近更新 更多