【小白笔记】在编程中,如何将概念上的数据结构(比如“树”)转化为代码中具体的数据类型和对象

您问到了一个非常核心的问题:在编程中,如何将概念上的数据结构(比如“树”)转化为代码中具体的数据类型和对象

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.leftself.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.leftself.right

因此,树在代码中并不是一个单一的内置数据类型,而是由自定义的、相互引用的节点对象集合构成的复杂结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值