从给定列表创建二叉树

时间:2014-05-27 07:40:50

标签: algorithm python-2.7 binary-tree

我想从给定列表创建二叉树。我该怎么办呢? 假设,

list = [0, 5400, 33735, 2317, 123, 242737, 0, 0, 0, 1368, 43654]

是我要为其创建树的列表。

我尝试了以下代码,但我不确定它在做什么。

class Node:
    def __init__(self,data):
        self.left = None
        self.right = None
        self.data = data
def check():
nodelist = [Node(c) for c in list]

    i,y = 0,len(list)
    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(list):
            y+=1
        else:
            break

    for n in nodelist:
        print unicode(n)

请原谅我在算法方面的弱点。数据结构真的吓到了我..

generating a binary tree from given data in python是我尝试代码的地方。

1 个答案:

答案 0 :(得分:0)

"I tried the following code but I am not sure what it is doing."很棒。你从哪里得到那些代码?该怎么办?

您想要二叉树还是排序二叉树?这棵树是否有限度或最小深度?

您的算法似乎正在转换为双链表。如果我在python中的有限经验并没有阻止我注意到一个非常奇怪的特殊/边界情况,它相当于:

nodelist = [Node(c) for c in list]

for i in range(len(list)):
    if i != 0:
        nodelist[i].left = nodelist[i-1]
    if i != len(list) - 1:
        nodelist[i].right = nodelist[i+1]

for n in nodelist:
    print unicode(n)

第一个块将数字列表转换为包含数字的节点列表。 第二个块通过列表连接除最左边节点以外的所有节点以及除最右边的节点之外的所有节点。 最后一个块打印现在形成双链表的节点列表。

顺便说一句,您的双链表可以解释为最大深度的未排序二叉树。但在这种解释中,&#34;离开&#34;是一个奇怪命名的父母的引用,这意味着你可能错过了每个不存在的左孩子的空引用。