如何在python中表示二叉树?

时间:2011-05-31 11:50:48

标签: python data-structures

目前我正以下列方式表示二叉树:

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

上面的树根植于2. None表示分支为空。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

可以使用平面列表表示二叉树,如here所述。这种方法的浪费程度取决于树木的形状。

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

答案 2 :(得分:0)

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

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

类可以使一个简单的应用程序变得不必要地复杂,特别是如果你处理如上所示的简单树。