二叉树的基本概念及性质

2023-11-14

 


 
 

  

一、基本概念

示例
  是 n 个结点的有限集。在任意一颗非空树中:(1)有且仅有一个特定的称为根的结点;(2)当 n>1 时,其余结点可分为 m (m>0) 个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一颗树,并且称为根的子树。      如,上图中(a)是只有一个根结点的树;(b)是有13个结点的树,其中 A 是根,其余结点分成 3 个互不相交的子集:T1={B,E,F,K,L},T2={C,G},T3={D,H,I,J,M};T1、T2、T3都是根 A 的子树,且自身也是一颗树。
  树的结点包含一个数据元素及若干指向其子树的分支。
  结点拥有的子树数称为结点的度。例如,上图中(b),A 的度为 3,C 的度为 1,F的度为 0。
  度为 0 的结点称为叶子或者终端结点。上图中(b),结点K、L、F、G、M、I、J都是树的叶子。
  度不为 0 的结点称为非终端结点分支结点。除了根结点之外,分支结点也称为内部结点。
  树的度是树内各结点的度的最大值。上图中(b)的树的度为3。
  结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。例如,上图(b)中,D 为 A 的子树 T3 的根,则 D 是 A 的孩子,而 A 则是 D 的双亲,同一个双亲的孩子之间互称兄弟。例如,H、I 和 J 互为兄弟。将这些关系进一步推广,可认为 D 是 M 的祖父。
  结点的祖先是从根到该结点所经分支上的所有结点。例如,M 的祖先是 A、D 和 H。以某结点为根的子树中任一结点都称为该结点的子孙。例如,B 的孙子为 E、K、L 和 F。
  结点的层次从根开始定义起,根为第一层,根的孩子为第二层。若某结点在第 l 层,则其子树的根就在第 l+1 层。其双亲在同一层的结点互为堂兄弟。例如,结点 G 与 E、F、H、I、J 互为堂兄弟。
  树中结点的最大层次称为树的深度高度。上图(b)的树的深度为 4。
  如果将树中结点的各子树看成从左至右是有序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
  森林是 m(m≥0) 棵互不相交的树的集合。对于树中每个结点而言,其子树的集合即为森林。

 
 

二、二叉树的种类

二叉树

  二叉树是另一种树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于 2 的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。所以二叉树是有序树。
  二叉树可以为空,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。由此这两棵子树也是二叉树,则由二叉树的定义,它们也可以是空树。由此,二叉树可以有 5 种基本形态。
二叉树形态
 

满二叉树

  如果⼀棵⼆叉树只有度为0的结点和度为2的结点,并且度为0的结点在同⼀层上,则这棵⼆叉树为满⼆叉树
满二叉树
这棵⼆叉树为满⼆叉树,也可以说深度为 k,有 2k-1 个节点的⼆叉树。
 

完全二叉树

  在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下⾯⼀层的节点都集中在该层最左边的若⼲位置。若最底层为第 h 层,则该层包含 1~ 2h-1 个节点。
  深度为 k 的,有 n 个结点的二叉树,当且仅当其每个结点都与深度为 k 的满二叉树中编号从 1 至 n 的结点一一对应时,称之为完全二叉树
完全二叉树
其实堆就是一个完全二叉树。
 

二叉搜索树

  ⼆叉搜索树是有数值的,⼆叉搜索树是⼀个有序树。

  • 若它的左⼦树不空,则左⼦树上所有结点的值均⼩于它的根结点的值;
  • 若它的右⼦树不空,则右⼦树上所有结点的值均⼤于它的根结点的值;
  • 它的左、右⼦树也分别为⼆叉搜索树。

二叉搜索树
 

平衡二叉搜索树

  平衡⼆叉搜索树⼜被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是⼀棵空树或它的左右两个⼦树的⾼度差的绝对值不超过1,并且左右两个⼦树都是⼀棵平衡⼆叉树。
平衡二叉搜索树
  

三、二叉树的性质

性质一

  在二叉树的第 i 层上至多有 2i-1 个结点(i≥1)。

利用归纳法证明此性质。
  i = 1时,只有一个根结点。显然,2i-1 = 20 = 1 是对的。
  现在假定对所有的 j,i ≤ j < i,命题成立,即第 j 层上至多有 2j-1 个结点。那么,可以证明 j = i 时命题也成立。
  由归纳假设:第 i-1 层上至多有 2i-2 个结点。由于二叉树的每个结点的度至多为 2,故在第 i 层上的最大结点数为第 i-1 层上的最大结点数的 2 倍,即 2×2i-2 = 2i-1

  

性质二

  深度为 k 的二叉树至多有 2k-1 个结点,(k≥1)。

由性质 1 可见,深度为 k 的二叉树的最大结点数为
公式
  

性质三

  对任何一棵二叉树 T,如果其终端结点数为 n0,度为 2 的结点数为 n2,则 n0 = n2 + 1。

  设 n1 为二叉树 T 中度为 1 的结点数。因为二叉树中所有结点的度均小于或等于 2,所以其结点总数为    

n = n0 + n1 + n2  (6-1)

  再看二叉树中的分支数。除了根结点外,其余结点都有一个分支进入,设 B 为分支总数,则 n = B + 1。由于这些分支是由度为 1 或 2 的结点射出的,所以又有 B = n1 + 2n2。于是得
  

n = n1 + 2n2 + 1  (6-2)

由式(6-1)和(6-2)得
  

n0 = n2 + 1

  

性质四

  具有 n 个结点的完全二叉树的深度为 ⌊log2n⌋+1。

证明:假设深度为 k,则根据性质 2 和完全二叉树的定义有

2 k-1 - 1 < n ≤ 2 k - 1    或  2 k-1 ≤ n < 2 k
于是 k-1 ≤ log 2n < k,因为 k 是整数。所以 k = ⌊log 2n⌋+1。

  

性质五

如果对一棵有 n 个结点的完全二叉树( 其深度为⌊log2n⌋+1 )的结点按层序编号( 从第 1 层到第⌊log2n⌋+1层,每层从左到右 ),则对任一结点 i(1≤i≤n),有

  1. 如果 i=1,则结点 i 是二叉树的根,无双亲;如果 i>1,则其双亲 PARENT(i)是结点⌊i/2⌋。
  2. 如果 2i>n,则结点 i 无左孩子(结点 i 为叶子结点);否则其左孩子 LCHILD(i)是结点 2i。
  3. 如果 2i+1>n,则结点 i 无有孩子;否则其右孩子 RCHILD(i)是结点 2i+1。

证明:
  我们只要先证明(2)和(3),便可以从(2)和(3)导出(1)。
  对于 i=1,由完全二叉树的定义,其左孩子是结点 2。若 2>n,即不存在结点 2,此时结点 i 无左孩子。结点 i 的右孩子也只能是结点 3,若结点 3 不存在,即 3>n,此时结点 i 无右孩子。
  对于 i>1 可分两种情况讨论:
  (1)设第 j (1≤j≤⌊log2n⌋) 层的第一个结点的编号为 i (由二叉树的定义和性质 2 可知 i=2j-1),则其左孩子必为第 j+1 层的第一个结点,其编号为 2j=2(2j-1)=2i,若 2i>n,则无左孩子;其右孩子必为第 j+1 层的第二个结点,其编号为 2i+1,若 2i+1>n,则无右孩子;
  (2)假设第 j (1≤j≤⌊log2n⌋) 层上某个结点的编号为 i (2i-1≤i≤2j-1),且 2i+1<n,则其左孩子为 2i,右孩子为 2i+1,又编号为 i+1 的结点是编号为 i 的结点的右兄弟或者堂兄弟,若它有左孩子,则编号必为 2i+1=2(i+1),若它有右孩子,则其编号必为 2i+3=2(i+1)+1。所示为完全二叉树上结点及其左、右孩子结点之间的关系。

规则

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树的基本概念及性质 的相关文章

  • 在 Mac 上升级 pip

    遇到的问题 终端安装包时 会有以下提示 pip install upgrade pip WARNING You are using pip version 20 2 3 however version 21 0 1 is available
  • C++基础知识(十四)--- vector容器

    目录 1 数据结构 线性连续空间 2 迭代器 随机迭代器 三 vector容器动态增长原理 四 vector 常用API 1 vector 构造函数 2 vector 赋值操作 3 vector 大小操作 swap 的使用 缩小容量 4 v

随机推荐

  • 如何创建指向目录的链接

    本文翻译自 How to create a link to a directory closed How to create a link xxx to home jake doc test 2000 something 如何创建到 hom
  • 史上最全

    点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 BEV综述 获取论文 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文 1摘要 以视觉为中心的俯视图 BE
  • 【HBZ分享】Redis如何与Mysql做数据同步,有几种方法?

    1 Mysql查完数据 再同步写入到Redis中 缺点1 会对接口造成延迟 因为同步写入redis本身就有延迟 并且还要做重试 如果redis写入失败 还需要重试 那就更费时间了 缺点2 不解耦 如果redis崩了 那直接卡线程了 缺点3
  • Java:简述try-catch-finally中return返回

    Java 简述try catch finally中return返回 Java 详解Java中的异常 Error与Exception Java 简述Java中的自定义异常 Java 简述throw throws异常抛出 Java 简述try
  • 字符串:找第一个只出现一次的字符(python实现)

    题目描述 给定一个只包含小写字母的字符串 请你找到第一个仅出现一次的字符 输入 一个字符串 长度小于100000 输出 输出第一个仅出现一次的字符 若没有则输出no 样例输入 abcabd 样例输出 c 思路1 统计各个字符出现的次数 然后
  • js Base64加密

    base64加密开始 var keyStr ABCDEFGHIJKLMNOP QRSTUVWXYZabcdef ghijklmnopqrstuv wxyz0123456789 function encode64 input var outp
  • 基于springboot & vue-admin-template 框架下的前后端分离开发,《文件上传》业务逻辑与el-upload组件详解,静态路径与动态路径

    springBoot vue admin template框架下的文件传输 我想实现的内容 前端部分代码的实现 el upload的学习与拓展 文件的upload与download 文件的show 回显 后端部分代码的实现 upload接口
  • Mysql中IFNULL , ISNULL, NULLIF这三个函数的相爱相杀

    IFNULL expr1 expr2 用法 假如expr1不为NULL 则 IFNULL 的返回值为expr1 否则其返回值为 expr2 IFNULL 的返回值是数字或是字符串 具体情况取决于其所使用的语境 以实际例子查看 SELECT
  • Charles软件使用

    Charles是通过将自己设置成系统的网络访问代理服务器 使得所有的网络访问请求都通过它来完成 从而实现了网络封包的截取和分析 安装Charles 去 Charles 的官方网站 http www charlesproxy com 下载最新
  • linux qt 动态链接库 静态链接库 学习笔记

    转自 http hi baidu com codeworkman item fa434498290bd38e591461d6 hello h ifndef HELLO H define HELLO H extern C void hello
  • Python中的面向对象编程的一些基本概念总结

    一 一些专有词汇的定义 面对对象编程 OOP object oriented programming 是一种程序设计范型 同时也是一种程序开发的方法 实现OOP的程序希望能够在程序中包含各种独立而又相互调用的对象 没一个对象又都应该能够接受
  • 转载Faster-rcnn理解

    文章转自https blog csdn net Lin xiaoyi article details 78214874 仅供方便自己学习 如有侵权请联系删除 效果图 作者 提到目标检测 就不得不RBG大神 该大神在读博士的时候就因为dpm获
  • CSDN第一篇博客,找工作日记第一篇

    今天结束了UC公司的几轮面试 不确定能否拿到offer 但回顾近几天的校招情况 比起十一之前不顺利的过程来说的确让人欣慰了很多 最近考了很多公司的笔试 也面过4399 UC TP LINK等等 峰回路转地明天还要参加百度的面试 当然还有菲音
  • C#程序演示Console.Write()和Console.WriteLine()的示例

    Console Write and Console WriteLine methods are used to print the text values on the Console Console Write prints only t
  • Postgresql查询每组的前N条记录

    Postgresql以指定字段分组后 查询每组的前N条记录 主函数 ROW NUMBER OVER PARTITION BY 省份名称 地市名称 ORDER BY arpu desc dou DESC AS row id 在原有数据表的基础
  • ORA-01157报错"cannot identify/lock data file"

    sqlplus以管理员方式接入数据库 启动时出现报错 如下 gt sqlplus as sysdba SQL gt startup ORA 01157 cannot identify lock data file 8 see DBWR tr
  • 数据结构:数组模拟队列

    实现一个队列 队列初始为空 支持四种操作 push x 向队尾插入一个数 x pop 从队头弹出一个数 empty 判断队列是否为空 query 查询队头元素 数组模拟队列 队列 先进先出 include
  • mysql注入语句说明

    判断闭合id 1 页面正常 id 1 页面不正常 id 1 页面恢复正常说明闭合是 id 1 页面正常 id 1 页面不正常 id 1 页面还是不正常说明闭合不是 如果这时id 1 页面恢复正常 说明闭合是 id 1 and 1 1id 1
  • 为何实现不了定时器DMA Burst传输?

    有人使用STM32F4系列开发产品 程序运行过程中需要不时地对外输出一串驱动脉冲 并要求这几串脉冲的频率可变 占空比固定 他想到使用基于STM32定时器的DMA BURST传输 具体点说 他期望不时地通过TIM3的CH1输出一串频率可变 占
  • 二叉树的基本概念及性质

    文章目录 一 基本概念 二 二叉树的种类 二叉树 满二叉树 完全二叉树 二叉搜索树 平衡二叉搜索树 三 二叉树的性质 性质一 性质二 性质三 性质四 性质五 一 基本概念 树是 n 个结点的有限集 在任意一颗非空树中 1 有且仅有一个特定的