首先先介绍一下树的基本概念:树是一种非线性的数据结构,它由以下几个部分组成:
-
根节点:一棵树有且仅有一个根节点,它是这棵树的起点。
-
分支:除了根节点,每个节点都有一个父节点,可以有多个子节点。
-
叶子节点:没有子节点的节点称为叶子节点。
-
高度:树的高度指从根节点到叶子节点的最长路径。
在Python中,我们可以使用节点类来表示树,通常节点类至少包含一个属性表示当前节点的值,以及一个列表记录它的子节点。
示例1:创建一棵树
我们可以使用如下的代码来创建一棵树:
# 定义节点类
class TreeNode:
def __init__(self, value):
self.value = value
self.children = []
# 添加子节点方法
def add_child(self, child_node):
self.children.append(child_node)
# 创建根节点
root = TreeNode("A")
# 创建子节点
child1 = TreeNode("B")
child2 = TreeNode("C")
child3 = TreeNode("D")
# 将子节点添加到根节点下
root.add_child(child1)
root.add_child(child2)
root.add_child(child3)
通过这个例子可以看到,我们首先需要定义一个节点类,然后可以使用这个节点类来创建树的各个节点,最后通过节点类的add_child
方法将节点组成一棵树。
示例2:遍历一棵树
树的遍历通常有三种方式:前序遍历、中序遍历和后序遍历。这里我们以前序遍历为例进行演示。前序遍历的顺序是先访问根节点,然后依次访问左子树和右子树。
# 前序遍历
def preorder_traversal(node):
if not node:
return
print(node.value)
for child in node.children:
preorder_traversal(child)
# 遍历树
preorder_traversal(root)
在遍历时,首先输出根节点的值,然后依次遍历每个子节点,对于每个子节点递归调用遍历方法,这样可以保证先访问左子树的节点。