嵌套列表实现树
在用嵌套列表实现树时,我们将用Python 的列表数据结构来编写上面定义的功能。虽然把界面写成列表的一系列方法与我们已实现的其他抽象数据类型有些不同,但这样做的是有趣的,因为它为我们提供一个简单、可以直接检查的递归数据结构。
在列表实现树时,我们将存储根节点的值作为列表的第一个元素。列表的第二个元素是一个表示其左子树的列表,第三个元素是表示其右子树的另一个列表。
嵌套列表法的一个非常好的特性是子树的结构与树相同;这个结构本身是递归的。
例子给出一个简单的树以及相应的列表实现。
def binary_tree(r):
return[r, [], []]
def insert_left(root, new_branch):
t = root.pop(1)
if len(t) > 1:
root.insert(1, [new_branch, t, []])
else:
root.insert(1, [new_branch, [], []])
return root
def insert_right(root, new_branch):
t = root.pop(2)
if len(t) > 1:
root.insert(2, [new_branch, [], t])
else:
root.insert(2, [new_branch, [], []])
return root
def get_root_val(root):
return root[0]
def set_root_val(root, new_val):
root[0] = new_val
def get_left_child(root):
return root[1]
def get_right_child(root):
return root[2]
r = binary_tree(3)
insert_left(r, 4)
insert_left(r, 5)
insert_right(r, 6)
insert_right(r, 7)
l = get_left_child(r)
print(l)
set_root_val(l, 9)
print(r)
insert_left(l, 11)
print(r)
print(get_right_child(get_right_child(r)))
[5, [4, [], []], []]
[3, [9, [4, [], []], []], [7, [], [6, [], []]]]
[3, [9, [11, [4, [], []], []], []], [7, [], [6, [], []]]]
[6, [], []]
[Finished in 0.1s]
注:素材来源于《数据结构与算法(Python版)》,授课人:北京大学陈斌教授。