从python中的给定数据生成二叉树

时间:2010-01-16 19:32:14

标签: python binary-tree

我想知道如何将列表中的值读入二叉树。 我有一个这样的三角形:

         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等。

2 个答案:

答案 0 :(得分:1)

这听起来像家庭作业,所以我不会写代码,但这里有几个提示:

  1. 即使您的三角形被写为列表,也可以这样做 0 1 2 3 4 5 6 7 8 9

  2. 因为看起来这是一个完整的二叉树(假设你的三角形是错误的,第三行实际上应该是3 4 5 6),你可以保持一个parents队列的头部是下一个需要孩子的父母。请注意,我特别不推荐递归。

  3. 完整二叉树是每个非叶节点恰好有两个子节点的树。如果这不应该是一个完整的二叉树,那么就没有确定的方法来解释问题(因为给定你的图片,节点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)