数据结构——【二叉树模版】

news/2025/2/15 23:17:48/

#思路

 1、二叉树不同于数的构建,在树节点类中,有数据,左子结点,右子节点三个属性,在树类的构造函数中,添加了变量maxNodes,用于后续列表索引的判断

2.GetTreeNode()函数是常用方法,用于获取不同节点的索引

3、Create()是重点,与树的区别在于,树的索引和节点值是自己设置的,而二叉树构建

树的过程,传入的主要参数是数组a,所以对应索引的节点值,需要根据二叉树索引特点自己构建

4、三种遍历过程,就是按照不同方式访问树的节点,以前序遍历为例,构建函数的过程就是访问当前节点的值(此功能由visit()完成),然后递归的访问左子结点和右子节点,如果深入递归的遍历过程,思维会混乱,不如明确递归函数书写的根本:

①这个函数功能是什么,完成这个功能

②递归的基本要求是,随着遍历的每一次深入,需要回来,因此需要一个判断,便于函数返回

③具备深搜的基本条件:每一个节点都有三个属性

索引作为节点的唯一标识符,在创建时会储存在一个顺序表中。

回到创建树的过程(create()过程),由传入参数可知,根节点的值和索引是确定的,当确定第一个节点值时,会继续对此节点添加左右子节点,而新连接成的节点(索引不同),他们也具有三个属性。所以实际上,这些节点依据索引的不同被访问和划分,每一个节点都有向下的枢纽,完成遍历过程。

python">class TreeNode:def __init__(self, val=None, left=None, right=None):self.val = valself.right = rightself.left = leftclass Tree:def __init__(self, maxNodes):self.root = Noneself.nodes = [TreeNode() for i in range(maxNodes)]self.nodesSize = maxNodesdef GetTreeNode(self, id):return self.nodes[id]def visit(self, node):print(node.val, end="")def Create(self, a, size, nodeId):if nodeId >= size or a[nodeId] == None:return NonenowNode = self.GetTreeNode(nodeId)nowNode.val = a[nodeId]nowNode.left = self.Create(a, size, nodeId * 2)nowNode.right = self.Create(a, size, nodeId * 2 + 1)return nowNodedef CreateTree(self, a):self.root = self.Create(a, len(a), 1)def preOrder(self, node):if node:self.visit(node)self.preOrder(node.left)self.preOrder(node.right)def preOrederTraversal(self):self.preOrder(self.root)print("")def inOrder(self, node):if node:self.inOrder(node.left)self.visit(node)self.inOrder(node.right)def inOrederTraversal(self):self.inOrder(self.root)print("")def postOrder(self, node):if node:self.visit(node)self.postOrder(node.left)self.postOrder(node.right)def postOrederTraversal(self):self.postOrder(self.root)print("")def Test():a = [None, "a", "b", "c", "d", None, "e", "f", "g", "h", None, None, None, None, "i"]T = Tree(15)T.CreateTree(a)T.postOrederTraversal()T.inOrederTraversal()T.postOrederTraversal()Test()


http://www.ppmy.cn/news/1572371.html

相关文章

MySQL 插入替换语句(replace into statement)

我们日常使用 insert into 语句向表中插入数据时,一定遇到过主键或唯一索引冲突的情况,MySQL的反应是报错并停止执行后续的语句,而replace into语句可以实现强制插入。 文章目录 一、replace into 语句简介1.1 基本用法1.2 使用set语句 二、注…

08模拟法 + 技巧 + 数学 + 缓存(D2_技巧)

目录 1. 只出现一次的数字(简单) 1.1. 题目描述 1.2. 解题思路 方法一:位运算 2. 多数元素(简单) 2.1. 题目描述 2.2. 解题思路 方法一:哈希表 方法二:排序 方法三:随机化 …

Windows 字体导入到 Docker 指定容器

以下是将 Windows 字体导入到 Docker 指定容器的详细操作步骤: 1. 准备工作 确认字体文件:在 Windows 系统中,字体文件通常位于 C:\Windows\Fonts 目录下。你可以选择需要导入的字体文件,常见的字体文件格式有 .ttf(…

【鸿蒙Next】优秀鸿蒙博客集锦

鸿蒙基础开发:多文件压缩上传及断点续传_鸿蒙 断点续传-CSDN博客

haproxy+nginx负载均衡实验

准备三台虚拟机: HAProxy 服务器192.168.65.131Web 服务器 1192.168.65.132Web 服务器 2192.168.65.133 在 HAProxy 服务器(192.168.65.131)上操作: 安装 HAProxy: sudo yum install -y haproxy编辑 HAProxy 配置…

通过服务器的 BMC(基板管理控制器)安装操作系统

一、BMC 安装操作系统的优势 无需物理接触服务器:通过带外管理(Out-of-Band)远程控制。支持虚拟介质挂载:直接从本地电脑上传ISO镜像到服务器。实时监控硬件状态:安装过程中可查看硬件日志、温度、电源等信息。二、准…

2024问题总结

20241225 XlVirtualList解决数据量大,滚动后,再点下拉会出现空白 setTimeout(() > { document.querySelector(.vxe-table--body).style.marginTop 0 }) 20241224双向数据绑定问题 加key是否已有这个元素$set慢半拍加$nextTick :key"isPlan?scope.row.dblamount:null&…

Python的那些事第二十一篇:Python Web开发的“秘密武器”Flask

基于 Flask 框架的 Python Web 开发研究 摘要 在 Web 开发的江湖里,Python 是一位武林高手,而 Flask 则是它手中那把小巧却锋利的匕首。本文以 Flask 框架为核心,深入探讨了它在 Python Web 开发中的应用。通过幽默风趣的笔触,结合实例和表格,分析了 Flask 的特性、优势以…