当前位置: 首页 > news >正文

二叉树的概念

文章目录

  • 二叉树
    • 一、树的概念
      • 1.树形结构
        • 1.1. 树的特点:
        • 1.2 概念:
        • 1.3 树的表示形式
      • 2.树的应用
    • 二、二叉树
      • 1.二叉数的概念
      • 2.满二叉树
      • 3.完全二叉树
      • 4.二叉树的性质
          • 练习:


二叉树


一、树的概念

1.树形结构

1.1. 树的特点:

1.根节点没有前驱节点
2.除根节点外,其余结点分成了M个互不相交的集合
3.子树的根节点有且只有一个前驱
4.树是递归定义的

在这里插入图片描述

  • 树形结构中,子树不能相交;
  • 除了根节点外,每个结点有且只有一个父结点;
  • 一颗N个结点的树,有N-1条边;
1.2 概念:

在这里插入图片描述

  • 1.结点的度:一个结点含子树的个数 ,如上图:A的度为3;
  • 2.树的度:树中,结点的度最大值 ,数的度为3 ;
  • 3.叶子结点/终端结点:度为0的结点(没有子结点)如J、F、K、L、H、I;
  • 4.父结点/双亲节点:含有子节点的结点. 如A是C的父结点;
  • 5.子结点/孩子结点:如B是A的子结点
  • 6.根结点:一棵树中,没有父结点的结点: A
  • 7.结点的层次:从根结点开始,根为第1层,根的子结点为第2层…
  • 8.树的高度/深度:树中结点的最大层次。 上图中树的高度为4;
  • 9.分支结点/非终端结点:度不为0的结点:E,G…
  • 10.兄弟结点:具有相同的父结点:E、F
  • 11.堂兄弟结点:其父结点都在同一层;F、G
  • 12.森林:多棵互不相交的的数的结合
1.3 树的表示形式

孩子兄弟表示法:
在这里插入图片描述

class Node{int val;//存储的数据Node firstChild;//第一个孩子引用Node nextBrother;//下一个兄弟引用
}

一个结点中,val存储数据
firstChild存该结点的第一个子结点
nextBrother存该结点下一个兄弟结点
没有孩子兄弟的时候为null

孩子双亲表示法

2.树的应用

文件夹结构

二、二叉树

在这里插入图片描述

1.二叉数的概念

  • 一个根节点加上它的左子树和右子树
  • 二叉树不存在度大于2的结点(一个结点只能有两个子节点)
  • 二叉树是有序树,子树的左右不能颠倒

2.满二叉树

在这里插入图片描述

1.每一层的结点都是满的,除了最后一层,每个结点都有两个子结点
2.每层的结点数都达到最大值
3.如果二叉树的层数为K,结点总数为2^k-1,则为满二叉树
4.结点为n,层数 = log2(n+1),向上取整

3.完全二叉树

在这里插入图片描述

1.从0开始依次从左往右按顺序一一对应
2.满二叉树是一种特殊的完全二叉树

4.二叉树的性质

  • 1.根结点的层数为1,则一棵非空二叉树的第i层上最多有 2^(i-1) 个结点
  • 2.根结点的二叉树的深度为1,深度为K的二叉树的最大结点数是 2^K-1
  • 3.具有n个结点的完全二叉树的深度k==log2(n+1) ,向上取整
  • 4.对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从0开始编号,则对于序号为i的结点有:

父结点下标为 i : 左孩子的下标:2i+1 ; 右孩子的下标 2i+2;
子结点下标为 i : 父结点下标:(i - 1)/ 2

  • 5.对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,则有n0=n2+1

也就是说:度为0的结点比度为2的结点多一个==有两个子节点的结点数=叶子结点数-1
n0=n2+1

在这里插入图片描述

练习:

在这里插入图片描述

A.n
完全二叉树结点的个数分奇数和偶数两种情况
奇数个结点,度为1的结点数为1
偶数个结点,度为1的结点数为0
联立总结点数之和的式子和 n0-1=n2

在这里插入图片描述

点击移步博客主页,欢迎光临~

偷cyk的图

相关文章:

  • uni-app——如何阻止事件冒泡
  • 97. 交错字符串
  • ES Nested解释
  • eslint识别不了别名解决方法
  • H5游戏源码分享-考眼力游戏猜猜金币在哪
  • 大模型在百度智能问答、搜索中的应用
  • selenium工作原理和反爬分析
  • ZKP7.1 Polynomial Commitments Based on Error-correcting Codes (Background)
  • 【前端性能】性能优化手段-高频面试题
  • JavaScript怎么把整数转换为字符串
  • 软考下午第一题 案列分析
  • C# Winform编程(10)Chart图表控件
  • 信息系统项目管理师教程 第四版【第5章-信息系统工程-思维导图】
  • git 推送到github远程仓库细节处理(全网最良心)
  • (二开)Flink 修改源码拓展 SQL 语法
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【知识碎片】第三方登录弹窗效果
  • CSS3 变换
  • express + mock 让前后台并行开发
  • IP路由与转发
  • java取消线程实例
  • java中的hashCode
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Laravel 菜鸟晋级之路
  • laravel 用artisan创建自己的模板
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Mac转Windows的拯救指南
  • Node 版本管理
  • node 版本过低
  • PHP 的 SAPI 是个什么东西
  • QQ浏览器x5内核的兼容性问题
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 浮动相关
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 聊聊hikari连接池的leakDetectionThreshold
  • 新版博客前端前瞻
  • 学习Vue.js的五个小例子
  • 栈实现走出迷宫(C++)
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • Java数据解析之JSON
  • Java总结 - String - 这篇请使劲喷我
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #QT(一种朴素的计算器实现方法)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #微信小程序:微信小程序常见的配置传值
  • (5)STL算法之复制
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET导入Excel数据