初识树结构和二叉树

news2024/11/18 9:22:02

一,树概念及结构

1.1树结构的概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
在这里插入图片描述
注意:树形结构中,子树之间不能有交集,否则就不是树形结构.例如:在这里插入图片描述
这个就不是一个树。

1.2数的相关概念

在这里插入图片描述

  1. 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6
  2. 叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点
  3. 非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G…等节点为分支节点
  4. 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点
  5. 兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点
  6. 树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6
  7. 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  8. 树的高度或深度:树中节点的最大层次; 如上图:树的高度为4
  9. 堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点
  10. 节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先
  11. 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙
  12. 森林:由m(m>0)棵互不相交的树的集合称为森林

1.3树的表示(孩子兄弟表示法)

typedef int DataType;
struct Node
{
 struct Node* _firstChild1; // 第一个孩子结点
 struct Node* _pNextBrother; // 指向其下一个兄弟结点
 DataType _data; // 结点中的数据域
};

这篇文章我们不深入解析这里,以后的文章我们进入堆的时候在来讨论这个。

二,二叉树的概念

2.1概念

一棵二叉树是结点的一个有限集合,该集合:

  1. 或者为空

  2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成在这里插入图片描述
    注意:

  3. 二叉树不存在度大于2的结点

  4. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

2.2特殊的二叉树

1.满二叉树
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是
说,如果一个二叉树的层数为K,且结点总数是 2^k-1,则它就是满二叉树。
2.完全二叉树
完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K
的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。
在这里插入图片描述

2.3二叉树的性质

  1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 个结点.
  2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 .
  3. 对任何一棵二叉树, 如果度为0其叶结点个数为 , 度为2的分支结点个数为 ,则有 = +1
  4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=
    . (ps:
    是log以2
    为底,n+1为对数)
  5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对
    于序号为i的结点有:
  6. 若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点
  7. 若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子
  8. 若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子

2.4二叉树的存储结构

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。

  1. 顺序存储
    顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储,二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。在这里插入图片描述
  2. 链式存储
    二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链,后面课程学到高阶数据结构如红黑树等会用到三叉链。

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

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

相关文章

嵌入式Linux中内存管理详解分析

Linux中内存管理 内存管理的主要工作就是对物理内存进行组织&#xff0c;然后对物理内存的分配和回收。但是Linux引入了虚拟地址的概念。 虚拟地址的作用 如果用户进程直接操作物理地址会有以下的坏处&#xff1a; 1、 用户进程可以直接操作内核对应的内存&#xff0c;破坏…

linux任务优先级

这篇笔记记录了linux任务&#xff08;指线程而非进程&#xff09;优先级相关的概念&#xff0c;以及用户态可以用来操作这些优先级的系统调用。 基本概念 调度策略 linux内核中的调度器为任务定义了调度策略&#xff0c;也叫调度类&#xff0c;每个任务同一时刻都有唯一的调…

Android Framework系列---输入法服务

Android Framework系列之输入法服务 本文基于Android R(11)&#xff0c;从Framework角度介绍Android输入法框架流程及常用调试方法。 写在前面 车载项目需要定制输入法&#xff0c;也有一些POC演示的项目使用原生比如LatinIME&#xff08;源码路径为/packages/inputmethods…

CVE-2019-9766漏洞实战

1.利用msf生成反向连接的shellcode 2.构造具有反弹shell的MP3文件 将上一步标记的部分替换脚本中的shellcode 3.运行脚本,生成恶意mp3文件 4.msf设置监听并运行exploit 5.打开恶意文件 6.攻击机已经获得shell 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教…

运行原理:eBPF 是一个新的虚拟机吗?

目录 背景 eBPF 虚拟机是如何工作的&#xff1f; BPF 指令是什么样的&#xff1f; eBPF 程序是什么时候执行的&#xff1f; 小结 背景 前面&#xff0c;我们从最简单的 Hello World 开始&#xff0c;带你借助 BCC 库从零开发了一个跟踪 openat() 系统调用的 eBPF 程序。…

Leetcode1839. 所有元音按顺序排布的最长子字符串

Every day a Leetcode 题目来源&#xff1a;1839. 所有元音按顺序排布的最长子字符串 解法1&#xff1a;滑动窗口 要找的是最长美丽子字符串的长度&#xff0c;我们可以用滑动窗口解决。 设窗口内的子字符串为 window&#xff0c;每当 word[right] > window.back() 时&…

喜讯!持安科技入选2023年北京市知识产权试点单位!

近日&#xff0c;北京市知识产权局发布了“2023年度北京市知识产权试点示范单位及2020年度北京市知识产权试点示范单位复审通过名单”名单。 经过严格的初审、形式审核和专家评审&#xff0c;北京持安科技有限公司入选“2023年北京市知识产权试点单位”。 北京市知识产权试点示…

A预测蛋白质结构

基于AlphaFold2进行蛋白质结构预测的文章解析 RoseTTAFold: Tunyasuvunakool, K., Adler, J., Wu, Z. et al. Highly accurate protein structure prediction for the human proteome. Nature 596, 590–596 (2021) AlphaFold2: Accurate prediction of protein structures a…

git commit报错:running pre-commit hook: lint-staged

报错截图&#xff1a; 报错信息&#xff1a; running pre-commit hook: lint-staged 解决方式&#xff1a; 在项目(vue)的package.json文件中&#xff0c;查找 “husky” 部分&#xff0c;并确认其下的 “pre-commit” 钩子是否正确地引用了 lint-staged。 其中配置示例如下&a…

2023年中国自动排气阀产业链、市场规模及存在问题分析]图[

自动排气阀是一种用于排除管道、容器或设备中累积的空气或气体的装置。在液体流动系统中&#xff0c;气体或空气可能会积聚在管道或容器中&#xff0c;影响流体流动、导致气锁和能效降低。自动排气阀的作用是在系统中的气体达到一定压力时&#xff0c;自动地释放气体&#xff0…

LeetCode_并查集_DFS_中等_2316.统计无向图中无法互相到达点对数

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条无向边。请…

如何解决电脑出现msvcp140.dll丢失问题,msvcp140.dll丢失的最全解决方法

首先&#xff0c;我们需要了解什么是“msvcp140.dll”。这是一个动态链接库文件&#xff0c;它是Microsoft Visual C 2015 Redistributable的一部分。当计算机运行某些程序时&#xff0c;这个文件会被调用&#xff0c;以支持程序的正常运行。因此&#xff0c;当这个文件丢失时&…

3dmax中导出模型到unity注意事项

从3dmax中导出 1. 注意单位&#xff0c;根据需要&#xff0c;选英寸还是选厘米 2. 不能导出有错误的骨骼&#xff0c;否则导入后模型网格里出现 Skinned Mesh Renderer &#xff0c;对网格变换移动有影响&#xff0c;正常情况下都应该是 Mesh Renderer 3. 导出一般不带光源和…

【LeetCode刷题】:仅仅反转字母(双指针+字符串)

给你一个字符串 s &#xff0c;根据下述规则反转字符串&#xff1a; 所有非英文字母保留在原有位置 所有英文字母&#xff08;小写或大写&#xff09;位置反转 返回反转后的 s 示例 1&#xff1a; 输入&#xff1a;s “ab-cd” 输出&#xff1a;“dc-ba” 示例 2&#xff1a; …

【sqlserver】配置管理器打不开

问题描述 无法连接到 WMI 提供程序。您没有权限或者该服务器无法访问。请注意&#xff0c;您只能使用SQL Server 配置管理器来管理 SQL Server 2005 和更高版本的服务 器。无效类[0x80041010] 解决方式: 命令提示符-右键-以管理员身份运行&#xff0c;再把以下代码执行一遍&…

案例分析真题--架构师

案例分析真题--架构师 试题1 质量属性架构风格 软件架构设计 系统开发基础 数据库系统 其他嵌入式 试题1 质量属性架构风格

bug记录(feign)——如何给feign加上请求头相关的参数,让生产者获得请求头中参数

问题描述 在微服务的调用中&#xff0c;如果消费者通过feign调用生产者&#xff0c;然后生产者方法中需要用到请求头&#xff0c;从请求头中获得token&#xff0c;但是feign默认是不携带请求头的&#xff0c;因此即使消费者请求feign的时候请求头中携带了token&#xff0c;也没…

QGIS003:【03捕捉工具栏】-点、线、面图层的捕捉操作

引言&#xff1a;QGIS捕捉工具栏包括启用捕捉、捕捉图层、捕捉位置、捕捉容差、启用拓扑编辑、拓扑规则、交叉处使用捕捉、启用追踪、自动捕捉等选项&#xff0c;本文介绍各选项的基本操作。 实验数据&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1GTeBNQqQJlJPj6Yu…

堆排序;大顶堆、小顶堆

堆排序 基本介绍 堆排序基本思想 堆排序步骤图解 在第二个步骤中&#xff0c;将节点6和它的两个左右节点比较大小&#xff0c;发现右节点最大&#xff0c;所以将节点6和节点9进行交换&#xff0c;如图所示&#xff0c;数组相应位置的值也交换 总结 代码实现 """…

Ubuntu 17.10的超震撼声音权限

从GNOME GUADEC 2017开发者大会归来之后&#xff0c;Canonical的Didier Roche就开始了一个日更博客系列&#xff0c;主要讲述即将带来的Ubuntu 17.10&#xff08;Artful Aardvark&#xff09;发行版将如何从Unity到GNOME Shell的转变。有趣的是&#xff0c;Ubuntu Unity桌面环境…