二叉树 Binary Tree
我怀着激动的心 走上了这颗树
今天是2021年11月12日
今天开始上树!!!!!!
生活中的树形结构:
树:
根节点:
一棵树有且只有一个根节点就是最上面的节点
兄弟节点:
每一行的节点 它们具有相同的父节点 那么就被称之为兄弟节点
子树的概念:
注意:红色部分就是我们所说的子树
什么是左子树和右子树呢?
举个例子:5的左子树就是51 右子树就是52
再比如说 2的左子树为21 右子树为22包含的红色区域的那一颗
比如说2的度就是2 因为它的子树个数为2
根节点1的度为5 因为它的子树个数为5
树的度:
比如说:上面的树的度为5
因为所有节点当中根节点的度为最大值为5
叶子节点:
节点的深度:
举个例子:节点2的深度就是2
因为从2到根节点的唯一路径就是2
根节点算一个节点自身算一个 加起来路径就是2
节点的高度:
举个例子:
假如说计算节点2的高度
何为高度?
当前节点到最远叶子节点的路径上的节点个数
首先我们应该知道什么是叶子节点?
度为0的节点
何为度?
就是任意一个节点子树的个数
那么可知:节点2的高度即为节点2到221 或222 或223其中任意一个节点
那么可得出高度为3 !!!!
包括自身节点在内一共遍历三个节点
了解一下:
Ok
重点来了:
二叉树 Binary Tree
每一个二叉树的度最大为2 表示最多有2颗子树
左右子树是有顺序的 左右是有严格区分的 是有序树
要细分出左右子树
只有右子树
1.
2.
我们该如何推导公式:n0=n2+1
对于一个二叉树来说:
度只可能是 0 1 2
那么我们上面设出叶子节点(即是度为0的点)为n0
度为2的点节点个数为n2
度为3的设为n3 那么总的节点个数为n=n0+n1+n2
这个清楚之后:
我们来观察边的关系:
当度 数为2时证明它只有两个子树 那么它的边就有两个边
度为1时 只有一个子树 那么度为1的节点 有一个边
由于叶子节点度为0 即是没有子节点 那么没有边
那么边数公式即为:T=n1+2*n2
我们知道一个常理:除了根节点之外的所有节点的上面都有一条边
如图红色圈出即是
那么我们又可以得出T=n-1 n为总的节点个数
n=n0+n1+n2
那么合并上述两个得:
n1+2*n2=n-1=n0+n1+n2-1
那么就可以推出n2=n0+1
真二叉树:
1.度不可以为1的二叉树
2.度要么为2 要么为0
因为节点15和节点13都是度为1的节点
满二叉树是 真二叉树的升级版
它们都是满足同一个度的限制
但是满二叉树必须所有的叶子节点都在最后一层
总结:
当高度为h的时候 二叉树节点最多为n
高度那个公式是用两边同时取对数即可
完全二叉树:
节点从上到下 从左到右依次排布 那么这就是完全二叉树
当最后一行 排满的时候就是满二叉树
并且记住:
完全二叉树的叶子节点只会出现在最后2层
完全二叉树的性质:
对左右取对数得第二个公式
完全二叉树至少有2的h-1次方个节点
如何确定h与n的关系:
h=log2n向下取整+1
何为向下取整?
假如说log2n结果是4.2 那么向下取整的结果为4
记住:
h为任意节点所在的高度
我们在计算机中进行
一般int n;就表示只取整数部分 那就相当于向下取整
那么我们也可以把log2n的小数结果强制转换成int类型
那么就相当于向下取整
总结:
何为高度?
从任意节点到最远叶子节点的路径
路径即是节点个数
何为叶子节点?
度为0的点
何为度?
任意节点的子树的个数
性质二:
假如是从1开始编号
从0开始编号:
一道例题:
先根据度的大小 由低到高来设出各节点的个数:
n0 n1 n2
n=n0+n1+n2 并且n0=n2+1
那么n=2*n0+n1-1
我们知道完全二叉树叶子节点只出现在最后两层
并且它有向左靠的子树排放规律
故推出 度为1的节点数要么为0要么为1
那么当n1=0时 n为奇数 n0=(n+1)/2
当n1=1 时 n为偶数 n0=n/2
也就是说
当n为偶数时 我们可知多加了一个1/2
那么我们应当floor((n+1)/2) 向下取整
但是编程时 我们默认了是向下取整
那么对于求叶子节点个数时:
直接n0=(n+1)>>1
这个结论是:
对于完全二叉树而言
但是编程的过程中:我们默认是向下取整
因此我们最好是使用floor那一个公式
二叉树 Binary Tree相关推荐
- 【数据结构】二叉树 (Binary Tree)
目录 一. 什么是树? 二. 二叉树 特殊二叉树 二叉树的性质 二叉树的存储 二叉树的遍历 二叉树的基本操作 一.什么是树? 之前咱们学习了一些简单的数据结构,如顺序表,链表,这些都是线性结构,线性结 ...
- 『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)!
『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)! 文章目录 一. 树 1.1. 树的定义 1.2. 树的基本术语 1.3. 树的性质 二. 二叉树 2.1. 二叉树的定义 2. ...
- [Swift]LeetCode968.监控二叉树 | Binary Tree Cameras
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- 由任意二叉树的前序遍历序列和中序遍历序列求二叉树的思想方法_算法与数据结构基础 - 二叉树(Binary Tree)...
二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...
- c++ 结构体遍历_二叉树(Binary Tree)的建立与遍历——C语言实现
一.运行环境简介 编辑器:VSCode + MicroSoft原生插件; :cat::dragon:运行环境: MinGW ; :cat::bust_in_silhouette:常用指令: gcc ...
- 数据结构--二叉树 Binary Tree
文章目录 1.概念 2.存储方式 2.1 链式存储(二叉树代码大部分是链式实现的) 2.2 顺序存储(基于数组) 3.二叉树的遍历 3.1 基于链表的二叉树实现代码 3.2 基于数组的二叉树实现代码 ...
- 【Algo】二叉树(Binary Tree)
Backto Algo Index 先上代码, 定义 typedef struct TNode {ElemType data;TNode* lchild;TNode* rchild; } TNode, ...
- 【数据结构】二叉树(Binary Tree)
目录 1 树的概念 1.1 树的定义 1.2 相关概念 2 二叉树的概念 2.1 二叉树的定义 2.2 二叉树的性质 2.3 特殊二叉树 2.3.1 满二叉树 2.3.2 完全二叉树 3 二叉树的储存 ...
- 编程基础 - 线索二叉树 (Threaded Binary Tree)
编程基础 - 线索二叉树 (Threaded Binary Tree) 返回分类:全部文章 >> 基础知识 返回上级:编程基础 - 二叉树 (Binary Tree) 本文将介绍线索二叉树 ...
最新文章
- Unix系统编程()虚拟内存管理
- solidworks模板_SolidWorks文件属性分类和创建方法,图纸自动属性的基础
- 【Spring注解系列01】@Configuration与@Bean
- python 用户的画像可视化呈现技术_一人一车一面:解读汽车大数据用户画像背后的AI技术...
- tomcat路径配置详解
- 23. 二叉搜索树的后序遍历序列
- Linux 内核源码(kernel source)路径
- Java编程输出你的年龄和姓名
- 有限温度量子多体系统与热态张量网络
- Python-数值类型
- 十三香是什么,怎么用?
- 【高数】交换二次积分次序时,为什么要观察上下限大小关系?
- 搜狗泛站怎么做?搜狗泛域名泛目录收录方法
- 傅里叶变换、拉普拉斯变换、z变换之间的联系
- ERD Online 4.0.4 元数据在线建模(免费、私有部署)
- [导入]微软.net精简框架常见问题及回答(中文版)
- 领域知识图谱落地实践中的问题与对策
- 安卓应用乾坤大挪移,Ubuntu上的搬运工:ARChon
- 异性交往,高情商的女人,常用这3种方法抓住男人的心
- 计算机网络实验三 ARP原理与ARP欺骗 实验报告