【发布时间】: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