树结构之嵌套列表法实现
除了队列,栈等数据结构,树也是另一种数据结构。最常见的树结构就是家谱了,从祖先开始,若干个儿子,孙子等等。文件系统也是树结构的应用之一。
树用递归的定义来说就是,树有一个根节点,然后(可有可无)有若干个分支(子树),每个子树其实也是一棵树,也有若干个子树。如果每个节点最多有两个分支,那就是二叉树,如果最多有n个分支,那就是n叉树。
我才用列表嵌套的方式实现了二叉树。从递归的形式上说树的列表形式是[根节点,左子树,右子树],而每个子树也是一棵树,所以每棵子树也是一个列表。
这样的话,初始化一棵树,即只有一个根节点,即[根节点,[],[]]的形式。
def BinaryTree(r):
return [r, [], []]
然后有插入左子树的方法,插入左子树,要给出插入哪个节点的左子树,即有一个相对节点。而且插入左子树就是如果原始的左子树为空,那就直接插入列表。如果原始的左子树不是空,也就是把原来的左子树的列表直接替换掉,原始的左子树成为新的左子树的左子树。
def insertLeft(root,newBranch):
# 先把原始的左子树取出来
t = root.pop(1)
# 判断原始左子树是否为空
if len(t) > 1:
root.insert(1,[newBranch,t,[]])
else:
root.insert(1,[newBranch, [], []])
return root
<