目前我正以下列方式表示二叉树:
[None,2,[None,3,None]]
上面的树根植于2. None
表示分支为空。
我宁愿在列表中实现它。 有没有更好的方法来做到这一点(不需要创建类)?
答案 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']]
类可以使一个简单的应用程序变得不必要地复杂,特别是如果你处理如上所示的简单树。