📅  最后修改于: 2023-12-03 14:55:38.268000             🧑  作者: Mango
树是计算机科学中经常用到的数据结构之一。在 Python 中,我们可以使用列表、元组、字典等内置数据类型实现树的构建和遍历。
树是由n(n>=1)个节点组成的有限集合,其中有一个特殊节点称为根节点,其余节点可以分为m(m>=0)个互不相交的集合T1、T2、……、Tm,其中每一个集合又是一棵树,称为根的子树。
二叉树是一种特殊的树,每个节点最多只有两个子节点,分别称为左子节点和右子节点。
我们可以使用列表来嵌套表示一棵树,其中每个列表项存储节点和其子树,该方法实现简单,但适合较小的树。
例:
tree = ['a',
['b',
['d', [], []],
['e', [], []]],
['c',
['f', [], []],
[]]
]
我们也可以使用嵌套字典的方式来实现树的构建,每个节点对应一个字典键值对,键表示节点名,值是一个嵌套的字典,其表示该节点的子树。
例:
tree = {'a':
{'b':
{'d': {}, 'e': {}},
'c':
{'f': {}, ''}
}
}
树的遍历包括前序遍历、中序遍历和后序遍历。
前序遍历的顺序是先遍历根节点,再遍历左子树,最后遍历右子树。
代码实现:
def preorder_traversal(tree):
if tree:
print(tree[0])
preorder_traversal(tree[1])
preorder_traversal(tree[2])
tree = ['a',
['b',
['d', [], []],
['e', [], []]],
['c',
['f', [], []],
[]]
]
preorder_traversal(tree) # 输出 a b d e c f
中序遍历的顺序是先遍历左子树,再遍历根节点,最后遍历右子树。
代码实现:
def inorder_traversal(tree):
if tree:
inorder_traversal(tree[1])
print(tree[0])
inorder_traversal(tree[2])
tree = ['a',
['b',
['d', [], []],
['e', [], []]],
['c',
['f', [], []],
[]]
]
inorder_traversal(tree) # 输出 d b e a f c
后序遍历的顺序是先遍历左子树,再遍历右子树,最后遍历根节点。
代码实现:
def postorder_traversal(tree):
if tree:
postorder_traversal(tree[1])
postorder_traversal(tree[2])
print(tree[0])
tree = ['a',
['b',
['d', [], []],
['e', [], []]],
['c',
['f', [], []],
[]]
]
postorder_traversal(tree) # 输出 d e b f c a
树在算法设计中有广泛的应用,Python 提供了多种数据类型来实现树的构建和遍历,我们可以选择适合自己的方式来实现。