【小白笔记】在编程中,如何将概念上的数据结构(比如“树”)转化为代码中具体的数据类型和对象
您问到了一个非常核心的问题:在编程中,如何将概念上的数据结构(比如“树”)转化为代码中具体的数据类型和对象。
1. 树的定义和代码表示(以 Python 为例)
list
(列表)、int
(整型)、float
(浮点型)等是 Python 中内置的数据类型。而 树 (Tree) 这种复杂的数据结构,通常需要通过组合这些内置类型来自定义。
在 Python 或其他面向对象编程语言中,表示一个树结构最常用的方式是使用类 (Class) 和对象 (Object) 来定义树的节点 (Node)。
核心思想:节点是树的基本单元
我们不是定义一个名为 Tree
的单一变量,而是定义一个名为 TreeNode
(树节点)的蓝图(即类),然后通过实例化这些节点对象并将它们连接起来,来构建一棵完整的树。
Python 代码中的表示
我们以二叉树(Binary Tree,每个节点最多有两个子节点)为例来展示:
1. 定义节点类 (The Node Class)
一个树节点需要存储以下信息:
- 值 (Value):节点本身存储的数据。
- 左子节点引用 (Left Child Reference):指向它的左子节点的指针或引用。
- 右子节点引用 (Right Child Reference):指向它的右子节点的指针或引用。
class TreeNode:"""定义二叉树的节点结构"""def __init__(self, val=0, left=None, right=None):# 1. 节点的值 (Value):存储节点数据,类型可以是 int, str, float 等self.val = val # 2. 左子节点 (Left Child):指向另一个 TreeNode 对象的引用(指针)self.left = left # 3. 右子节点 (Right Child):指向另一个 TreeNode 对象的引用(指针)self.right = right
术语解释:
- 类 (Class):面向对象编程中的蓝图或模板,用来创建对象。
- 对象 (Object):根据类创建出来的实体。在这里,
TreeNode
类可以创建具体的节点对象。 - 引用 (Reference):在 Python 中,
self.left
和self.right
存储的是指向其他TreeNode
对象的内存地址。在 C/C++ 等语言中,这被称为指针 (Pointer)。
2. 构建一棵树 (Building a Tree)
有了 TreeNode
类,我们就可以通过创建对象并设置它们之间的引用关系来构建一棵树:
假设我们要构建一个简单的树:
1
/
2 3
# 1. 创建根节点 (Root Node)
root = TreeNode(val=1)# 2. 创建左子节点和右子节点
node_2 = TreeNode(val=2)
node_3 = TreeNode(val=3)# 3. 建立连接关系 (引用关系)
root.left = node_2 # 根节点的左子节点指向 node_2
root.right = node_3 # 根节点的右子节点指向 node_3# 现在,变量 'root' 就代表了这棵树的入口(根节点)
# 我们可以通过 root.left.val 访问到 2
总结
对于像“树”这样的抽象数据结构 (Abstract Data Type, ADT):
概念上的数据结构 | Python 中的表示方式 |
---|---|
整体的树 (Tree) | 由根节点对象 (e.g., root ) 代表,通过节点间的引用连接起来。 |
树的节点 (Node) | 通过自定义 class (类)来定义,例如 TreeNode 。 |
节点关系 (Edges) | 通过对象间的引用 (Reference) 来实现,例如 self.left 或 self.right 。 |
因此,树在代码中并不是一个单一的内置数据类型,而是由自定义的、相互引用的节点对象集合构成的复杂结构。