我想知道如何将列表中的值读入二叉树。 我有一个这样的三角形:
0
1 2
3 4 5
6 7 8 9
我写了一个像这样的类节点
class node:
def __init__(self,data,left=None,right=None):
self.data=data
self.left=left
self.right=right
基本上我想做的就是这样的事情
节点(0,节点(1),节点(2))
我想制作一个可以处理更大三角形的递归函数。能以某种方式告诉我我应该做什么吗?
编辑:很明显二叉树不是解决这个问题的方法。我基本上想要找到的是从上到下的所有不同组合。比如0,1,3,6 0,2,5,8等。
答案 0 :(得分:1)
这听起来像家庭作业,所以我不会写代码,但这里有几个提示:
即使您的三角形被写为列表,也可以这样做
0 1 2 3 4 5 6 7 8 9
因为看起来这是一个完整的二叉树(假设你的三角形是错误的,第三行实际上应该是3 4 5 6
),你可以保持一个parents
队列的头部是下一个需要孩子的父母。请注意,我特别不推荐递归。
完整二叉树是每个非叶节点恰好有两个子节点的树。如果这不应该是一个完整的二叉树,那么就没有确定的方法来解释问题(因为给定你的图片,节点1和2中的每个节点都可以有1个或2个子节点。)
答案 1 :(得分:0)
对于这样的清单:
a = 'aBCdef'
以下程序生成以下结构:
- a -
- B C
B C -
- d e
d e f
e f -
代码(假设输入列表对应于'完整'三角形):
class Node:
def __init__(self,data,left=None,right=None):
self.data=data
self.left=left
self.right=right
def __unicode__(self):
return '%s %s %s' % (
self.left.data if self.left or '-',
self.data,
self.right.data if self.right or '-')
nodelist = [Node(c) for c in a]
i,y = 0,1
while True:
for x in range(y):
nodelist[i].left = nodelist[i-1] if x!=0 else None
nodelist[i].right = nodelist[i+1] if x!=y-1 else None
i+=1
if i<len(a):
y+=1
else:
break
for n in nodelist:
print unicode(n)