树-王道-复试

1.度: 树中孩子节点个数,所有结点的度最大值为 树的度
2.有序树: 逻辑上看,树中结点的各子树从左至右是有次序的,不能互换
**3.**树的根节点没有前驱,其他节点只有一个前驱
**4.**所有节点可有零个或者多个后继

常考性质

1. 节点数 = 总度数(总边数)+1
2.度为 m 的树、m 叉树的区别:
在这里插入图片描述
** 3. 度为m的数第 i 层 至多有m(i-1)个结点,m叉树第i层至多有m(i-1)个节点 **
**4.高度为 h 的 m 叉树至多:**有(m^h-1)/m-1个节点
5.高度为 h 的 m 叉树至少: h个节点
6.高度为 h、度为 m 的树至少: h+m-1个节点
7.最小高度为: logmn
在这里插入图片描述
在这里插入图片描述
最小高度的计算:
在这里插入图片描述

2.完全二叉树

就是右叶子节点为缺,左边都是连起来的
在这里插入图片描述
特点:

1.只有最后两层可能有叶子结点。
2最多只有一个度为 1 的结点。(屁股节点,也就是度为1的节点只有1个)
3若按层序从 1 开始编号,结点 i 的左孩子为 2i,右孩子为 2i+1;结点 i 的父节点为 ⌊ i / 2 ⌋ \lfloor i/2\rfloor⌊i/2⌋。
4 i ≤ ⌊ n / 2 ⌋ 为分支结点,i > ⌊ n / 2 ⌋ 为叶子结点。

3.平衡二叉树与二叉搜索树的区别:

平衡:树上任一结点的左子树和右子树的深度之差不超过 1。
搜索:左小于根,右大于根
https://blog.csdn.net/weixin_57128596/article/details/127216542?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170853038416800185813532%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170853038416800185813532&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-127216542-null-null.nonecase&utm_term=BST&spm=1018.2226.3001.4450

4.度合节点数的区别:

1.节点总数n=n0+n1+n2(度为0的节点数+度为1的节点数+度为2的节点数)
n0=n2+1(度为0的节点数=度为2的节点数+1)
2.二叉树的第i层至多有2的i-1次方个节点
3.高度为h的二叉树至多有2的h次方-1个节点
4.如果完全二叉树有2K个节点(偶数),则n1=1,n0=k,n2=k-1
5.如果完全二叉树有2K-1个节点(奇数),则n1=0,n0=k,n2=k-1

5.二叉树的左右孩子

1:节点i的左孩子为 2i
2:节点i的右孩子为 2i+1
3:节点i的父节点为【i/2】
4:节点i的层次为 【log2(i+1)】

6.前中后序遍历

前序:
根左右
中序:
左根右
后序:
左右根

typedef struct BiNode{ElemType data;struct BiNode *lchild,*rchild;
}BiNode,*BiTree;void PreOrder(BiTree T){if(T!=NULL){visit(T);//访问根节点PreOrder(T->lChild);//递归左子树PreOrder(T->rChild);//递归右子树}
}void InOrder(BiTree T){if(T!=NULL){InOrder(T->lchild);//递归左子树visit(T);//访问当前节点InOrder(T->rchild);//递归右子树}
}void PostOrder(BiTree T){if(T!=NULL){PostOrder(T->lchild);//递归左子树PostOrder(T->lright);//递归右子树visit(T);}
}
求树的最大深度
int maxDepth(BiTree T){if(T==NULL) return 0;int lDepth=maxDepth(T->lchild);//当前节点的左子树深度int rDepth=maxDepth(T->rchild);//当前节点的右子树深度return lDepth>rDepth?lDepth+1:rDepth+1;
}
二叉树的层序遍历
//二叉树节点
typedef struct BiNode{ElemeType data;struct BiNode* lchild,*rchild;
}BiNode,*BiTree;
//链式队列节点,作层序
typedef struct LinkNode{BiNode* data;struct LinkNode* next;
}LinkNode;//层序集合,类似List<List<TreeNode>>
typedef struct{LinkNode *front,*rear;
}LinkQueue;void LevelOrder(BiTree T){LinkQueue Q; //类似List<List<TreeNode>>InitQueue(Q);BiTree p;//二叉树节点EnQueue(Q,T);//将T入到我们的队列Q中while(!IsEmpth(Q)){DeQueue(Q,p);//将队列中的队首元素出队,并将其赋值给 p,这样就可以访问当前节点 pvisit(p);//将节点的子节点入队if(p->lchild!=NULL){EnQueue(Q,p->lchild);}if(p->rchild!=NULL){EnQueue(Q,p->rchild);}}
}

7.中序前序后序的节点变换

8.树和森林题目

1.
1.:讨论二叉树高度,必须要说他是完全二叉树,高度为log2(n)+1
2.:树-一般我们阐述的是左孩子右兄弟树,左侧图,叶子节点树为1,对应二叉树-因为右兄弟,所以转为二叉树,有两个叶子节点
在这里插入图片描述
2.
M2+M3相加即为右子树的节点个数

在这里插入图片描述
在这里插入图片描述

3.
1.F是一个森林,有n个非终端节点,说明有n颗树,B为二叉树
2.右指针为空的节点为(n+1)
在这里插入图片描述
4.
利用中序和后序遍历得二叉树,然后根据二叉树画出森林,得到树 C

在这里插入图片描述
5.
1.X是某节点的右孩子,说明他在左边一定有自己的兄弟节点,故D
在这里插入图片描述
6.
1.n=n0+n1+n2
2.n2=n0-1;
3.n1=2012-116=1896

在这里插入图片描述

7.
直接上公式logm(n(m-1))+1,向上取整

在这里插入图片描述

树转二叉树的规则:

左孩子右兄弟,BCD三个节点彼此就是兄弟,B是A的孩子,CD是B的兄弟,
但是有个从左到右的顺序,最左的是长兄,
**画法:**从左开始搜,平层为兄弟节点

在这里插入图片描述
森林应该保持平层;注重左右带来的关系
在这里插入图片描述

树和森林和二叉树的遍历关系:

森林和二叉树是一种遍历关系
在这里插入图片描述

9.题目

1.
在这里插入图片描述
2.
节点数=所有节点度数之和+1;
在这里插入图片描述
3.
最大值是高度
在这里插入图片描述
4.
1.节点数=至多高度+度-1
2. 度为n,第i层至多有n的i-1次方
在这里插入图片描述
5.
在这里插入图片描述
度为4,高度为h,至少节点数=h+4-1
度为4,高度为h,最多节点数:(4^h-1)/(度-1)

6
logm(n(m-1)+1)
在这里插入图片描述
7.

n节点总数=对应度数对应的节点个数+…
n0=n-n1-n2-n3-n4…
n节点总数=叶子节点个数n0+其余度数节点的累加
在这里插入图片描述
8.
1.完全二叉树的高度为:(log2n)+1,n为节点个数**(注意一定要是完全二叉树)**
否则链式情况需要考虑,可能有4个节点高度为4
2.如果一个完全二叉树没有左孩子,那么该节点一定是叶子节点
在这里插入图片描述
9.
需要注意i是否是>0,如果i从0开始,那么第i个节点的左孩子为2
i+1,否则为2i

在这里插入图片描述

10

度为0说明该节点为叶子节点,所以在具象化的时候,我们只需要重点在度为2上,所含节点数至少为:2(h-1)+1*
高度为h,所包含节点数至少为2h-1

在这里插入图片描述
11.
最小高度,马上想到完全二叉树,完全二叉树的高度为:(log2n)+1,2为叉树,n为节点数

在这里插入图片描述

12.
公式一:节点总数2n=n0+n1+n2(各度数节点之和 )
公式二:节点总数2n=非叶子节点n1数量1+n22(度数)+1

在这里插入图片描述
13.
二叉树最大深度,每层节点数最少即可,每层最少为2,所以2*h- 1=节点数n
在这里插入图片描述

14.

完全二叉树,已知高为h,最少节点——>(log2^n)+1=h)
由于高度h满二叉树共有2^h-1个结点
高度为h-1满二叉树有2^(h-1)-1个结点
可得2^(h-1)-1 < n <=2^h-1
不等式同时+1:2h-1 < n+1 <=2h
不等式同时取对数:
h-1 < log2n+1 <= h
在这里插入图片描述
15.
计算满二叉树的节点个数:2^n-1,比如这里的五层,就是2的5次方-1
如果是计算某i层的节点个数:2^(i-1)
在这里插入图片描述

16.
方法一:必然大于n/2,所以D
方法二:1.n0=n2+1 ;2.n=n0个数+n1+n2;3.然后完全二叉树的n1不是0就是1,再往里代入,只有D满足
在这里插入图片描述

17.
完全二叉树前n层至多节点数:2^n-1——>前6层最多有 2 ^6-1
完全二叉树前n层至少节点数:2^(n-1)
满二叉树某层节点数:2^(i-1)
满二叉树所有节点数:2^n-1
在这里插入图片描述
18.
1.124个叶子节点,说明这是n0的数量
2.n0=n2+1;n2=n0-1;
3.n=n0+n1+n2——>n=2n0+n1-1
带入n0=124,n1=0/1求解

在这里插入图片描述
19.
1.空指针数量=n+1
2.结点数=度+1
在这里插入图片描述
20
判断节点所在层数的公式:[log2(n)]+1,向下取整
在这里插入图片描述
21.
m叉树拥有n个节点,最小高度为:[logm(n(m-1))]向上取整

在这里插入图片描述
21.
1.首先计算前5层,节点数为:2^5-1(相当于满二叉树)=31
2.第6层有8个叶子节点,有两种情况:倒数第一层或者倒数第二层,因为考虑最多节点数,所以为倒数第二层
第i层节点数为最大:2^(i-1)=32,所以第6层非叶子节点个数为32-8=24个,所以第7层有48个
3.总数为:31+32+48=111

在这里插入图片描述
22.
1.每个非叶子节点有2个子节点,说明n1=0,所以我们只需要关注n0和n2即可
2.n0=n2+1
3.n=2n0-1;
所以为2K-1

在这里插入图片描述
23.
答案:31,存储单元数量跟树的高度相关,比如高度为5,直接算满二叉树所需空间为:2^5-1=31
在这里插入图片描述

10.二叉树应用,哈夫曼树

10.1定义

哈夫曼树的路径长度为:从树的根节点->任意节点的路径长度**(边数)与该节点上权值的乘积和**

在这里插入图片描述
最小二叉树,最优二叉树:俗称哈夫曼树(作压缩)

在这里插入图片描述

10.2哈夫曼树的构造

在这里插入图片描述

10.3哈夫曼树的编码

1.方法:0,1从左至右构造
2.WPL(WPL也是哈夫曼树二进制编码的长度)只算我们的哈夫曼树的叶子节点
比如说以下:
二进制编码长度为224,但是若采用3为固定长度编码,那么二进制编码长度为300位,效率提高,压缩数据
在这里插入图片描述

10.4题目

1.
哈夫曼树的构造,最小的两个节点构造一个新节点
在这里插入图片描述
2.
哈夫曼编码:1.首先画出哈夫曼树,然后标上其编码 2.不要忘记相反方向,左子树和右子树之间可以换个位置
在这里插入图片描述
如图所示:
在这里插入图片描述
3.
不同频次节点字符处于相同的层,(因为我要挑选的是最小的两个节点组成一个新的节点
比如:1和2节点,是属于定层编码,同一层

在这里插入图片描述

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

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

相关文章

Leetcoder Day23| 回溯part03:组合+分割

语言&#xff1a;Java/Go 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的所有不同组合 &#xff0c;并以列表形式返回。你可以按任意顺序返回这些组合。 candidates 中的同一个…

环形光源让图像质量瞬间提升,一探究竟吧!

光源对机器视觉检测系统的性能起着重要作用,精确的光学结构设计可以提高捕获图像的质量,准确地分离目标和背景信息,不充足的光线会使捕捉到的图像无法满足需求&#xff0c;针对不同的检测对象,不同的形状光源应运而生。我们来看看最常用的LED光源之一—环形光源。 环形光源&…

vue3 使用pina

一、Vue 3 项目中集成Pina 状态管理库 要在 Vue 3 项目中使用 Pina&#xff08;Vue 3 状态管理库&#xff09;&#xff0c;您可以按照以下步骤操作&#xff1a; 1. 安装 Pina 库相应的插件&#xff1a; yarn add pinia # 或者使用 npm npm install pinia 2. 在您的 Vue 3 项…

电脑休眠之后唤不醒

现象&#xff1a;午休时间电脑休眠了&#xff0c;醒来之后发现在密码输入界面&#xff0c;但鼠标键盘没反应。按重启键或电源机重新开机&#xff0c;结果开不了机。 原因&#xff1a;1、内存条脏了&#xff0c;导致内存条读取失败 2、休眠的时候硬盘休眠了&#xff0c;导致按…

AngularJS安装版本问题

一、安装 Angular CLI 脚手架安装命令&#xff1a; npm install -g angular/cli 在安装前请确保自己安装NodeJS环境版本为V18及以上&#xff0c;否则会因node版本问题导致项目无法正常运行。 脚手架安装后&#xff0c;已提示了当前node版本必须为18.13.0或大于20.9.0版本&…

git之分支管理

一.理解分支 我们看下面这张图片&#xff1a; 在版本回退⾥&#xff0c;你已经知道&#xff0c;每次提交&#xff0c;Git都把它们串成⼀条时间线&#xff0c;这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前&#xff0c;只有⼀条时间线&#xff0c;在Git⾥&#xff0c;这个分⽀…

2024年 前端JavaScript入门到精通 第四天 笔记

4.1 函数的基本使用以及封装练习 ★ 函数命名规范 4.2 函数的参数以及默认参数 函数的灵魂&#xff01;&#xff01;&#xff01; 4.3 函数封装数组求和案例 4.4 函数返回值return 4.5 函数返回值细节以及上午总结 4.6 函数返回值案例-求最大值和最 4.7 函数复习以及断点进入函…

如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

挑战杯 基于机器视觉的12306验证码识别

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向…

Inno setup 打包jar包+前端dist+mysql+navicat等应用文件操作

目录 一、 使用exe4j将后端jar包打包成exe应用文件 1.创建一个新的工程 2.选择一个你想要存放的路径 3.进入配置界面 4.选择jar转换exe模式 5.自定义名字和选择输出路径 6.配置初始化 7.配置java环境 8.测试运行结果 二、Inno 打包应用文件exe 1.新建一个工程文件 2…

【hashmap】【将排序之后的字符串作为哈希表的键】【获取 HashMap 中所有值的集合】Leetcode 49 字母异位词分组

【hashmap】【将排序之后的字符串作为哈希表的键】【获取 HashMap 中所有值的集合】Leetcode 49 字母异位词分组 解法1 将排序之后的字符串作为哈希表的键解法2 在解法一的基础上加入了getOrDefault ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f3…

从零开始手写mmo游戏从框架到爆炸(二十二)— 战斗系统三

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 目录 地图设定 战斗引擎 服务端的BattleHandler 客户端的相关handler 战斗场景展示 执行效果 文接上一章。我们把战斗系统demo应用到实际的项目中来。在第十九章&#xf…

AI对话系统app开源

支持对接gpt&#xff0c;阿里云&#xff0c;腾讯云 具体看截图 后端环境&#xff1a;PHP7.4MySQL5.6 软件&#xff1a;uniapp 废话不多说直接上抗揍云链接&#xff1a; https://mny.lanzout.com/iKFRY1o1zusf 部署教程请看源码内的【使用教程】文档 欢迎各位转载该帖/源码

智慧公厕是什么?智慧公厕意义何在

随着城市化进程的加速&#xff0c;公厕成为城市管理中不容忽视的一环。智慧公厕传统的公厕管理方式已经无法满足当今社会的需求&#xff0c;因此智慧公厕的出现成为解决问题的利器。什么是智慧公厕&#xff1f;智慧公厕是实现公共厕所信息化、数字化、智慧化全方位管理与服务的…

啤酒:精酿啤酒与烧烤的热烈碰撞

在夏日的傍晚&#xff0c;烧烤与啤酒总是绝配。当Fendi Club啤酒遇上烧烤&#xff0c;它们将为我们带来一场热烈的美味碰撞。 Fendi Club啤酒&#xff0c;以其醇厚的口感和淡淡的麦芽香气而著称。这款啤酒在酿造过程中采用了特别的工艺&#xff0c;使得酒体呈现出诱人的金黄色&…

F2图例封装 - Bar

基于vue3 和 F2 3.5.0 <template><div :style"{minHeight: ${height}px,width: 100% }" ref"container"><canvas v-show"showChart" :id"chartId" class"chart-canval"></canvas><empty-box v-…

零感佩戴的开放式耳机,音质悦耳更耐听,西圣Air体验

每天都用蓝牙耳机的朋友应该不少&#xff0c;我平时也经常戴&#xff0c;不过最近我用的不是常规的入耳式耳机&#xff0c;因为它佩戴不舒适&#xff0c;戴久了耳朵特别难受。所以现在我换上了开放式耳机&#xff0c;这种耳机叫做OWS&#xff0c;我的这款是西圣Air&#xff0c;…

查看mysql数据库的版本

要查看MySQL数据库的版本&#xff0c;可以使用以下几种方法&#xff1a; 命令行&#xff08;已连接到MySQL服务器&#xff09;&#xff1a; 登录到MySQL服务器后&#xff0c;在MySQL提示符下执行&#xff1a; mysql> SELECT VERSION(); 或者&#xff0c;也可以执行 STATUS; …

Java异常梳理总结

目录 什么是异常 , 异常的分类 ? 异常的基本概念 什么是Throwable ? Throwable 类常用方法有哪些&#xff1f; Exception 和 Error 有什么区别&#xff1f; 运行时异常与一般异常有什么区别&#xff1f; 常见的RuntimeException 有哪些 ? NoClassDefFoundError 和 C…

面试总结之JVM入门

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;你为什么要学习JVM&#xff1f;&#x1f380;JVM的作用 &#x1f380;JVM的构成&#xff08;5大类&#xff09;&#x1f3e8;1.类加载系统&#x1f415;类什么时候会被加…