数据结构——初识树和二叉树

news2024/11/17 0:04:08

7922950948a945c2a9d2da741e34f69b.png

线性结构是一对一的关系,意思就是只有唯一的前驱和唯一的后继;

非线性结构,如树形结构,它可以有多个后继,但只有一个前驱;图形结构,它可以有多个前驱,也可以有多个后继。 

77535ac2661b4c6fbdf483d7b69b9fa3.png

 树的定义

308c58020a9647968642d9327ca5bc97.png

 树是由根和子树组成,子树又是由子树的根和子树的子树组成,是一个递归的(嵌套的)结构。

示意图如下:

0c83e258c15b45b7b28b98dc8b45d4b3.png 

 树的其他表现方式

7785158030b743cbbe27c906c8ae10c6.png

 树的基本术语

dd8f6c59ebdb47b4beaa19cb645eede1.png

这个树的根有三个后继结点,每个后继结点只有一个前驱结点。

结点:数据元素以及指向子树的分支。 

根结点:非空树中无前驱结点的结点,一个树当中,只有根节点没有前驱。

结点的度:结点拥有的子树数。

树的度:树内各结点的度的最大值。 上图树的度为3。

度为0的结点称为叶子结点,也叫终端结点。

度不为0的结点称为非终端结点,也叫分支结点。

内部结点:根结点以外的分支结点。

结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。

兄弟结点:有共同双亲的结点。

堂兄弟:双亲在同一层的结点。

结点的祖先:从根到该结点所经分支上的所有结点。 

 结点的子孙:以某结点为根的子树中的任一节点。

 树的深度:树中结点的最大层次。

 2769250943614018b255e67c1f70b8c7.png

有序树:树中结点的各子树从左至右有次序(最左边的为第一个孩子)。

无序树:树中结点的各子树无次序。 

森林:是m(m>=0)棵互不相交的树的集合。

        (1)把根节点删除树就变成了森林。

        (2)一棵树可以看成一个特殊的森林。

        (3)给森林中的各子树加上一个双亲结点,森林就变成了树。

树结构和线性结构的比较

线性结构树结构
第一个元素(无前驱)根节点(无双亲)
最后一个元素(无后继)叶子结点(无孩子)
其他数据元素(一个前驱一个后继)其他结点——中间结点(一个双亲,多个孩子)
一对一一对多

二叉树的定义

 为何要重点研究每结点最多只有两个的树?

  • 二叉树的结构最简单,规律性最强;可以证明,所有树都能转为唯一对应的二又树,不失一般性。
  • 普通树(多又树)若不转化为二又树,则运算很难实现

        二叉树在树结构的应用中起着非常重要的作用,因为对二叉的许多操作算法简单,而任何树

都可以与二叉树相互转换,这样就解决了树的存储结构及其运算中存在的复杂性。

二叉树是 n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的分别

称作这个根的左子树和右子树的二叉树组成。

特点:

1、每个结点最多有两个孩子(二叉树中不存在度大于2的结点)。

2、子树有左右之分,其次序不能颠倒。

3、二叉树可以是空集合,根可以有空的左子树或空的右子树。

注意:二叉树不是树的特殊情况,它们是两个概念。

二叉树结点的子树要区分左子树和右子树,即使只有一棵树也要进行区分,说明它是左子树还是右子树。

ca1f7303aac7492dad25c248b403fab1.png

(也就是二叉树每个结点位置或者说次序都是固定的,可以是空,但是不可以说它没有位置,而树的结点位置是相对于别的结点来说的,没有别的结点时,它就无所谓左右了)。

b838706ec08049b28237e034abae39c4.png

 二叉树的5种基本形态

 b2751b059d9644429ca294e4da8e6250.png

注:虽然二叉树和树的概念不同,但有关树的基本术语对二叉树都适用。 

二叉树的性质

  1.  在二叉树的第i层上至多有eq?2%5E%7Bi-1%7D个结点
  2. 深度为k的二叉树至多有eq?2%5E%7Bk%7D-1个结点
  3. 对于任何一颗二叉树,如果其终端节点数为n,度为2的节点数为m,则n=m+1

满二叉树:深度为k且含有-1个结点的二叉树,即每i层都有个结点

完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树。

完全二叉树的特点:

(1)叶子结点只可能在层次最大的两层上出现;

(2)对任一结点,若其右分支下的子孙的最大层次为l,则其左分支下的子孙的最大层次必为1或l+1。

 

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

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

相关文章

kubeadm部署k8s集群,版本1.23.6;并设置calico网络BGP模式通信,版本v3.25--未完待续

1.集群环境创建 三台虚拟机,一台master节点,两台node节点 (根据官网我们知道k8s 1.24版本之后就需要额外地安装cri-dockerd作为桥接才能使用Docker Egine。经过尝试1.24后的版本麻烦事很多,所以此处我们选择1.23.6版本) 虚拟机环境创建参考…

【LeetCode】动态规划—63. 不同路径 II(附完整Python/C++代码)

动态规划—63. 不同路径 II 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 本文将探讨“不同路径 II”这一问…

线性跟踪微分器TD详细测试(Simulink 算法框图+CODESYS ST+博途SCL完整源代码)

1、ADRC线性跟踪微分器 ADRC线性跟踪微分器(ST+SCL语言)_adrc算法在博途编程中scl语言-CSDN博客文章浏览阅读784次。本文介绍了ADRC线性跟踪微分器的算法和源代码,包括在SMART PLC和H5U平台上的实现。文章提供了ST和SCL语言的详细代码,并讨论了跟踪微分器在自动控制中的作用…

深入理解 Nuxt.js 中的 app:error 钩子

title: 深入理解 Nuxt.js 中的 app:error 钩子 date: 2024/9/27 updated: 2024/9/27 author: cmdragon excerpt: 摘要:本文深入讲解了Nuxt.js框架中的app:error钩子,介绍其在处理web应用中致命错误的重要作用、使用方法及实际应用场景。通过创建Nuxt项目、定义插件、触发…

基于nodejs+vue的水产品销售管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

Could not find com.mapbox.mapboxsdk:mapbox-android-accounts:0.7.0.解决

AndroidStudio编译APK出现如下错误: Could not find com.mapbox.mapboxsdk:mapbox-android-accounts:0.7.0. 出现上面错误原因是因为没有打开对应的仓库导致的, 手动添加如下创建地址可解决: maven { url https://maven.aliyun.com/repos…

vue项目中的node、node-sass、sass-loader之间的版本关系

这个报错,想必大部分人都会遇到,版本不适配的问题,记录下解决方案。 版本适配问题 node 与node-sass node-sass与sass-loader sass-loader 4.1.1,node-sass 4.3.0sass-loader 7.0.3,node-sass 4.7.2sass-loader 7.3.…

dify新特性:并行agent/工作流开发与变量存储

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 再谈Agent:Dify智能体实现Txet2SQLMoe模式:或将是最好的大模…

UE5: Content browser工具编写

Extend content browser 创建自定义菜单入口的步骤:create custom menu entry. steps: Load content browser module -> PathViewContextMenuExtenders -> Add in our own delegate -> Bind to our own member functions 基础概念(本文实…

C++【类和对象】(拷贝构造与运算符重载)

1. 拷贝构造 如果⼀个构造函数的第⼀个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数。 注意:拷贝构造是用一个已经实例化的对象来初始化一个新对象…

中级职称评审到底需要准备什么材料?

职称评审需要的材料非常非常多,其中涉及到各类表格,这些小资料,看起来简单,实则做起来复杂,不过这种资料只能当年通知出来之后进行整理,今天甘建二跟大家说一下职称评审中需要提前准备的一些重要材料&#…

5.10直方图均衡化

基本概念 直方图均衡化(Histogram Equalization)是一种常用的图像处理技术,用于改善图像的对比度。通过调整图像中像素值的分布,直方图均衡化可以使图像的动态范围更广,从而增强图像的细节可见度。 直方图均衡化原理…

c++ 杂项

简答题 1、什么是虚函数?什么是纯虚函数? 虚函数是在类中定义函数时,在函数前加 virtual 关键字。父子类中只有一个该函数。 如果子类中没有重写该虚函数。那么父子类空间中使用的都是父类定义的该函数。 如果子类中重写了该虚函数&#xff…

【Python基础(一)】

学习分享 一、基本语法1、输出print语句2、常量的写法3、运算符 (/) 与(//)4、字符串5、列表5.1、列表查询元素是否存在5.2、列表查询元素是否存在5.3、身份运算符5.4、列表的增删改查 6、元组6.1、tuple() 7、字典8、函数8.1、值传递8.2、引用传递8.3、函数的传参 二、文件的操…

小北的JDK1.8下载、安装和环境配置教程——附件资源

​前言 亲爱的友友们,欢迎来到小北博客!今天,我们将一起探索如何下载、安装并配置JDK 1.8,这是Java开发中一个非常关键的步骤。无论你是Java新手还是资深开发者,掌握JDK的正确安装和配置都是必不可少的。Java Download…

828华为云征文 | 基于华为云Flexus云服务器X搭建部署——AI知识库问答系统(使用1panel面板安装)

🚀对于企业来讲为什么需要华为云Flexus X来搭建自己的知识库问答系统??? 【重塑知识边界,华为云Flexus云服务器X引领开源问答新纪元!】 🌟 解锁知识新动力,华为云Flexus云服务器X携…

【工具分享】Jigsaw勒索病毒解密工具

前言 Jigsaw勒索软件首次出现在2016年,以其独特的威胁手段迅速在网络安全界引起广泛关注。该恶意软件因其在勒索信中使用了恐怖电影《电锯惊魂》中的角色Billy the Puppet的图像而得名。Jigsaw不仅会加密受害者的文件,还会逐渐删除这些文件以迫使受害者…

基于nodejs+vue的游戏陪玩系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

大数据毕业设计选题推荐-国潮男装微博评论数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…