2011-05-31 64 views
1

目前我表示以下面的方式的二进制树:如何在python中表示二叉树?

[None,2,[None,3,None]] 

树上述植根于2. None意味着该分支是空的。

我宁愿在列表中实现这一点。 有没有更好的方法来做到这一点(不诉诸创建类)?

+10

为什么aribtrary限制“而不是诉诸创建类”?我认为做这个*的最好方法是*定义一个类。 – 2011-05-31 11:53:00

+0

“更好的方式”在哪方面?更高效? – phynfo 2011-05-31 12:16:30

回答

3

它可以表示使用平面列表的二进制树,如所描述here。这种方法浪费多少取决于树的形状。

我很好奇,为什么你坚持避免类。如果你想把它包装在一个类中,你可以定义一个干净的API并隐藏最终用户的实现细节。

4

如果你想表示一个完整的二叉树(即具有所有节点的两个孩子,除了叶子),那么你可以只使用一个平面列表的代表树。

你可以很容易地确定父亲和这样一个节点的两个孩子:

def leftChild(lst,i): 
    try: 
    return lst[i*2] 
    except IndexError: 
    return None 

def rightChild(lst,i): 
    try: 
    return lst[i*2+1] 
    except IndexError: 
    return None 

def father(lst,i): 
    try: 
    return lst[i/2] 
    except IndexError: 
    return None 
0

这里是我的方法: 数组的数组,其中索引为0的项目是根项目:

[['Level A', 'A1', 'A2'], ['Level B', 'B1', 'B2'], ['Level C', 'C1', 'C2']] 

类可以做一个简单的应用程序过于复杂,特别是如果你处理像上述表示的简单的树木。