引言
随着大数据时代的到来,我们面临的数据不再是简单的线性关系,而是错综复杂的网状结构。树和图正是用于表示这类复杂关系的最佳工具。树是一种特殊的图,它具有层次结构;而图则更加灵活,能够表达任意节点之间的连接关系。掌握树与图的实现方法,不仅有助于提高算法设计能力,还能为解决现实世界的问题提供新的视角。
基础语法介绍
树的基本概念
- 节点(Node):树中的每个元素被称为节点,它可能包含一些值以及指向其他节点的引用。
- 根节点(Root Node):没有父节点的唯一节点。
- 叶子节点(Leaf Node):没有子节点的节点。
- 父节点(Parent Node):直接拥有一个或多个子节点的节点。
- 子节点(Child Node):直接隶属于一个父节点的节点。
- 兄弟节点(Sibling Node):拥有同一个父节点的节点。
图的基本概念
- 顶点(Vertex):图中的基本单位,相当于树中的节点。
- 边(Edge):连接两个顶点的线段,代表了顶点之间的关系。
- 有向图(Directed Graph):每条边都有方向性的图。
- 无向图(Undirected Graph)):所有边都没有方向性的图。
- 权重(Weight):可以为边赋予一定的数值,用来表示顶点间关系的强度或成本等信息。
基础实例
让我们先从一个简单的二叉树开始。二叉树是一种特殊的树,每个节点最多有两个子节点。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
# 创建树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
def inorder_traversal(root):
if root:
inorder_traversal(root.left)
print(root.val, end=' ')
inorder_traversal(root.right