数据结构-树

news2024/10/3 0:25:16

1、树的分类
(1)满二叉树
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k)-1,则它就是满二叉树。
(2)完全二叉树
除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则这个二叉树就是完全二叉树。
(3)二叉查找树
二叉查找树,又叫做二叉排序树、二叉搜索树。
空树或者满足下列性质的二叉树:
1)若其左子树非空,则左子树上所有节点的值都小于根节点的值;
2)若其右子树非空,则右子树上所有节点的值都大于根节点的值;
3)其左右子树都是一棵二叉查找树。
(4)平衡二叉树
平衡二叉树,又称AVL树。它是一种特殊的二叉查找树。
空树或者满足下列性质的二叉查找树:
1)左子树和右子树的深度(高度)之差的绝对值不超过1;
2)其左右子树都是一颗平衡二叉树。
二叉树节点的平衡因子定义为该节点的左子树的深度减去右子树的深度,则平衡二叉树的所有节点的平衡因子只可能是-1、0、1。
(5)红黑树
红黑树是每个结点都带有颜色属性的二叉查找树。
空树或者满足下列性质的二叉查找树:
1)节点不是黑色,就是红色(非黑即红);
2)根节点为黑色;
3)叶节点为黑色(叶节点是指末梢的空节点Nil或Null);
4)一个节点为红色,则其两个子节点必须是黑色的(根到叶子的所有路径,不可能存在两个连续的红色节点);
5)每个节点到叶子节点的所有路径,都包含相同数目的黑色节点(相同的黑色高度)。


(6)B树
m阶可理解为m树,即内含(m-1)个关键字和m个子树。
一棵m阶B树是一棵平衡的m路搜索树。
B树又称B-树、B_树,一棵m阶的B树满足下列条件:
1)每个结点至多有m棵子树;
2)除根结点外,其它每个分支节点(非叶节点)至少有⌈m/2⌉(向上取整)棵子树;
3)根结点至少有两棵子树(除非B树只包含一个结点);
4)所有叶结点在同一层上,B树的叶结点可以看成一种外部结点,不包含任何信息;
5)有j个孩子的非叶结点恰好有j-1个关键码,关键码按递增次序排列。


(7)B+树
B+树是应文件系统所需而产生的一种B树的变形树。一棵m阶的B+树和m阶的B树的差异在于:
1)有n棵子树的结点中含有n个关键码;
2)所有的叶子结点中包含了全部关键码的信息,及指向含有这些关键码记录的指针,且叶子结点本身依关键码的大小自小而大的顺序链接;
3)所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键码。


2、二叉树的存储
二叉树的存储主要分为链式存储和顺序存储两种。
(1)链式存储
和链表类似,二叉树的链式存储依靠指针将各个节点串联起来,不需要连续的存储空间。
每个节点包括三个属性:
1)数据data。data不一定是单一的数据,根据不同情况,可以是多个具有不同类型的数据。
2)左节点指针left
3)右节点指针right。


(2)顺序存储
顺序存储就是利用数组进行存储,数组中的每一个位置仅存储节点的data,不存储左右子节点的指针,子节点的索引通过数组下标完成。根结点的序号为1,对于每个节点Node,假设它存储在数组中下标为i的位置,那么它的左子节点就存储在2i的位置,它的右子节点存储在下标为2i+1的位置。


3、二叉树的遍历
(1)先序遍历
二叉树的先序遍历,就是先输出根结点,再遍历左子树,最后遍历右子树,遍历左子树和右子树的时候,同样遵循先序遍历的规则。


(2)中序遍历
二叉树的中序遍历,就是先递归中序遍历左子树,再输出根结点的值,再递归中序遍历右子树。


(3)后序遍历
二叉树的后序遍历,就是先递归后序遍历左子树,再递归后序遍历右子树,最后输出根结点的值。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThingsKit物联网平台 v1.0.1-Release版本发布

基于ThingsBoard二次开发的物联网平台推荐:ThingsKit物联网平台,开箱即用的物联网低代码平台,提供N1N的产品服务体系,帮助企业快速搭建稳定可靠的物联网系统平台,为企业节省大量时间及人力成本。www.thingskit.com Th…

centos7安装k3s和rancher

文章目录一. 安装k3s1.1 关闭防火墙1.2 修改hostname1.3 安装containerd1.4 containerd安装mysql81.5 安装k3s1.6 卸载k3s二. 安装rancher2.1 安装helm2.1.1 下载2.1.2 安装2.1.3 添加几个repo2.1.4 报错2.2 helm安装ingress-nginx2.3 添加rancher repo2.4 helm安装rancher(自己…

读论文---Clip微调---CLIP Itself is a Strong Fine-tuner

标题 摘要 Recent studies have shown that CLIP has achieved remarkable success in performing zero-shot inference while its fine-tuning performance is not satisfactory. In this paper, we identify that fine-tuning performance is significantly impacted by hyp…

复杂并发场景下的并发调度模型在转转的演进之路

文章目录一、问题背景二、复杂并发场景释义2.1 简单并发场景2.2 复杂并发场景三、分组并发调度模型演进3.1 简单异步并发调度3.2 分组并发调度四、自驱动并发调度模型演进4.1 一个优化耗时的小目标及其实现4.2 下一步的疑惑4.3 对问题的重新思考以及自驱动并发调度模型的诞生4.…

蓝桥集训(附加面试题)第八天

本文来源于算法面试题特训专栏,这里有大量专业性的算法题比如(动态规划21天,大厂特训28天等等) 欢迎大家一起学习。 链接:传送门 目录标题导读Java蓝桥集训面试题点击直接资料领取导读 在刚刚结束的 每日算法&面…

【pandas】教程:3-取DataFrame子集

pandas 取 DataFrame 的子集 pandas 选择列 注: 引用库的导入和数据的导入只做一次,所有代码是在 jupyter notebook 里完成的。 import pandas as pd titanic pd.read_csv("data/titanic.csv")只要年龄数据 ages titanic["Age"…

速度杠杠的,部署机器学习模型的这7个要点要谨记

在模型部署时,模型的性能和耗时都非常重要。但是我们在构建模型时,往往没有考虑模型的预测速度。虽然性能优化会损害预测准确性,但更简单的模型通常运行得更快,也不容易过拟合。 预测延迟被测量为进行预测所需的经过时间。延迟通常被视为一个…

降维和特征选择的对比介绍

在machine learning中,特征降维和特征选择是两个常见的概念,在应用machine learning来解决问题的论文中经常会出现。特征降维和特征选择的目的都是使数据的维数降低,使数据维度降小。但实际上两者的区别是很大,他们的本质是完全不…

Java整合RocketMQ实现生产消费

文章目录参考文档环境搭建生产者普通消息同步发送异步发送单向传输顺序消息延迟消息批量消息事务消息消费者Push消费Pull 消费代码仓库参考文档 RocketMQ作为阿里系开源项目,有非常成熟的中文文档可以快速了解并上手。 环境部署控制台安装RocketMQ常见问题 环境搭…

【现代机器人学】学习笔记八:轨迹生成

这节课的内容主要讲述如何通过插值等方式生成一条满足运动学约束的运动轨迹。这节的内容在全书中较少,相比前一章开链动力学而言,可以说内容少了许多。但是这节的内容却是目前在机械臂应用方面使用最广泛的一节。 闲话休提,马上开始&#xf…

ThreeJS:创建第一个三维场景

场景效果 ThreeJS与WebGL WebGL使得开发者可以直接使用显卡的计算资源,创建高性能的二维和三维计算机图形效果,然后在JavaScript脚本中进行WebGL编程,创建三维场景并生成动画。但是,原生的WebGL编程是十分复杂的,且容易出错。然而,Three.JS库可以简化WebGL的开发过程。 基…

十、Java 17 新特性

十、Java 17 新特性 JDK 17 在 2021 年 9 月 14 号正式发布了!根据发布的规划,这次发布的 JDK 17 是一个长期维护的版本(LTS)。Java 17 提供了数千个性能、稳定性和安全性更新,以及 14 个 JEP(JDK 增强提案&#xff09…

示波器应用(二)

前篇我们对场景六基色色相和白平衡还有明度进行了验证,对黑白场做了微调。后面我们还需要对场景调光。 本篇主要涉及一些画面美术知识,不感兴趣可以跳过。 我们需要先了解一个摄影知识 曝光 下面要说到一种颜色模式HSB,HSB分别表示&#…

Redhat-ansible-合集

1.安装 2.部署ANSIBLE 2.1INVENTORY 2.2ANSIBLE配置文件 2.3AD HOC命令 3.PLAYBOOK 4.变量 5.ansible vault加密变量 6.ansible_facts 7.loop 8.条件判断 9.handler处理 10.错误处理 11.tags标签 12.管理文件 13.template模板 14.host-pattern 15.动态Inventory 16.ro…

玻纤效应对skew的影响(一)

在高速SerDes传输系统中,随着信号速率的提高,UI会越来越小,传输线的对内skew会越来越大。以PCIe信号来说,PCIe4.0速率的一个UI是62.5ps,当速率提高到PCIe5.0时,每个UI就只有31.25ps,更进一步&am…

SparkSQL源码分析系列01-Catalyst作用

SparkSQL 是如何将SQL语句转化为Spark任务的呢? 详细过程如下图 通过拉去 github 的 Spark 源码,查看 SparkSQL 模块的 readme.txt 文件可以看出,SparkSQL 包含4个方面的内容 SparkSQL源码主要包含4大模块 Catalyst (sql/catalyst)&…

Solidity之为什么 ++i 比 i++ 省gas

文章目录为什么 i 比 i 省gas测试验证demo1demo2为什么 i 比 i 省gas为什么 i 比 i 省gas i通常更昂贵,因为它必须增加一个值并“返回”旧值,因此可能需要在内存中保存两个数字我在记忆中只使用过一个数字。在许多情况下,在编译器优化之后&a…

【SVM】简单介绍(四)

1、Soft Margin SVM 对偶求解 构造拉格朗日函数 L12∥w∥2C∑i1nξi−∑i1nαi(yi(wTxib)−1ξi)−∑i1nγiξiαi≥0γi≥0\begin{aligned} & L\frac{1}{2}\|w\|^2C \sum_{i1}^n \xi_i-\sum_{i1}^n \alpha_i\left(y_i\left(w^T x_ib\right)-1\xi_i\right)-\sum_{i1}^n \ga…

dagum基尼系数分析全流程

Dagum系数分析 Dagum基尼系数是传统基尼gini系数的升级,其可分解为组内系数、组间系数和超变密度系数,即Dagum 组内Gw 组间Gb 超变密度Gt。 组内Gw分别反映各地区内部水平的差距、组间Gb反映各地区之间水平的差距,以及超变密度Gt反映各地区…

Strtus2漏洞 - Struts2-052 Struts2-057 Struts2-059

文章目录S2-052(CVE-2017-9805)环境搭建漏洞复现S2-057(CVE-2018-11776)环境搭建漏洞复现S2-059(CVE-2019-0230)环境搭建漏洞复现S2-052(CVE-2017-9805) 原理:Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序…