当前位置: 首页 > news >正文

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

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

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

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

http://www.dtcms.com/a/498851.html

相关文章:

  • 【STM32项目开源】STM32单片机智能农业大棚控制系统
  • github开源笔记应用程序项目推荐-Joplin
  • 【Swift】LeetCode 438. 找到字符串中所有字母异位词
  • 【SoC】【W800】基于WM IoT SDK的环境搭建
  • BFS 与 DFS——力扣102.二叉树的层序遍历
  • 使用IOT-Tree的OPC UA Client连接器对接OPC UA Server获取数据到系统中
  • 优质网站建设在哪里wordpress分类目录名称
  • 专题一 之 【双指针】
  • 将Windows应用上架至Microsoft Store
  • 对LlamaFactory的一点见解
  • 紫金保险车险官方网站关键词优化营销
  • 大模型-智能体-【篇一:单智能体框架】
  • LLMs之MultiAgent:OpenAgents(创建AI智能体网络)的简介、安装和使用方法、案例应用之详细攻略
  • IDEA 中 Tomcat 部署 Java Web 项目(2)
  • [SCADE编译原理] 状态机到数据流的源到源翻译(2005)
  • 小迪安全v2023学习笔记(一百三十四讲)—— Windows权限提升篇数据库篇MySQLMSSQLOracle自动化项目
  • 2023年10月份04741计算机网络原理真题及答案
  • Room 概要
  • 元宇宙中的数字身份与数据主权:个体权益的守护与边界
  • 函数模板与类模板:C++泛型编程核心解析
  • [GO]Go语言包访问控制与导入机制
  • Flink细粒度滑动窗口性能优化与解决方案深度解析
  • Flink SQL 窗口函数详细
  • 成都网站建设的公司哪家好网站怎么推广出去
  • 【Go】--gin框架基本使用
  • [优选算法专题四.前缀和——NO.25一维前缀和]
  • openharmony之分布式相机开发:预览\拍照\编辑\同步\删除\分享教程
  • LeetCode 402 - 移掉 K 位数字
  • 皮卡丘XSS
  • 思维|栈