树-王道-复试

news2024/9/20 9:30:42

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,这样就可以访问当前节点 p
    visit(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.coloradmin.cn/o/1471402.html

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

相关文章

[Linux]文件基础-如何管理文件

回顾C语言之 - 文件如何被写入 fopen fwrite fread fclose fseek … 这一系列函数都是C语言中对文件进行的操作&#xff1a; int main() {FILE* fpfopen("text","w");char str[20]"write into text";fputs(str,fp);fclose(fp);return 0; }而上…

全域增长方法论:帮助品牌实现科学经营,助力长效生意增长

前两年由于疫情反复、供给需求收缩等条件制约&#xff0c;品牌业务均受到不同程度的影响。以双十一和618电商大促为例&#xff0c;就相比往年颇显“惨淡”&#xff0c;大多品牌营销都无法达到理想预期。 随着市场环境不断开放&#xff0c;2023年营销行业开始从低迷期走上了高速…

最新IE跳转Edge浏览器解决办法(2024.2.26)

最新IE跳转Edge浏览器解决办法&#xff08;2024.2.26&#xff09; 1. IE跳转原因1.1. 原先解决办法1.2. 最新解决办法1.3. 最后 1. IE跳转原因 关于IE跳转问题是由于在2023年2月14日&#xff0c;微软正式告别IE浏览器&#xff0c;导致很多使用Windows10系统的电脑在打开IE浏览…

【计算机科学引论 Computing Essentials 2021】【名词术语】【第7章】

Computing Essentials Chapter 7: Secondary Storage 二级存储 MATCHING Match each numbered item with the most closely related lettered item. Write your answers in the spaces provided. Choices a. DVD (Digital Versatile Disc) b. file compression c. hi-def…

pytorch -- torch.nn下的常用损失函数

1.基础 loss function损失函数&#xff1a;预测输出与实际输出 差距 越小越好 - 计算实际输出和目标之间的差距 - 为我们更新输出提供依据&#xff08;反向传播&#xff09; 1. L1 torch.nn.L1Loss(size_averageNone, reduceNone, reduction‘mean’) 2. 平方差&#xff08;…

蓝桥杯-成绩分析

许久不敲代码&#xff0c;库名也忘了&#xff0c;精度设置还有求最大最小值都是常规题了。 #include <iostream> #include <iomanip> using namespace std; int main() { //一种不用开数组的方法 int n; cin>>n; int top0; int low100;//确定最大…

【MySQL面试复习】详细说下事务的特性

系列文章目录 在MySQL中&#xff0c;如何定位慢查询&#xff1f; 发现了某个SQL语句执行很慢&#xff0c;如何进行分析&#xff1f; 了解过索引吗&#xff1f;(索引的底层原理)/B 树和B树的区别是什么&#xff1f; 什么是聚簇索引&#xff08;聚集索引&#xff09;和非聚簇索引…

外贸获客必读!2个月内成交2单,EDM如何避免垃圾箱成功拓展新客户?

近期&#xff0c;不少伙伴反馈在使用EDM邮件开发时遇到了一些问题&#xff0c;例如邮件发不出去&#xff0c;或者直接进入垃圾箱。在这篇文章中&#xff0c;我们将分享某用户是如何解决这些问题&#xff0c;并通过实战案例成功成交了2个客户。 搜索&#xff1a;focussend.com &…

[云原生] 二进制安装K8S(中)部署网络插件和DNS

书接上文&#xff0c;我们继续部署剩余的插件 一、K8s的CNI网络插件模式 2.1 k8s的三种网络模式 K8S 中 Pod 网络通信&#xff1a; &#xff08;1&#xff09;Pod 内容器与容器之间的通信 在同一个 Pod 内的容器&#xff08;Pod 内的容器是不会跨宿主机的&#xff09;共享…

API保障——电子商务安全性与稳定性设计

在这次深入探讨中&#xff0c;我们将深入了解API设计&#xff0c;从基础知识开始&#xff0c;逐步进阶到定义出色API的最佳实践。 作为开发者&#xff0c;你可能对许多这些概念很熟悉&#xff0c;但我将提供详细的解释&#xff0c;以加深你的理解。 ​ API设计&#xff1a;电…

MySQL数据库应用与开发(全)

一、 MySQL数据库基本操作 1、创建表 #创建数据库 CREATE DATABASE teaching CHARSET utf8; #贴换teaching为当前数据库 USE teaching;二、数据表的创建 1、创建学生表 CREATE TABLE IF NOT EXISTS student (studentno CHAR(11) NOT NULL COMMENT 学号,sname CHAR(8) NOT N…

TextCNN:文本分类卷积神经网络

模型原理 1、前言2、模型结构3、示例3.1、词向量层3.2、卷积层3.3、最大池化层3.4、Fully Connected层 4、总结 1、前言 TextCNN 来源于《Convolutional Neural Networks for Sentence Classification》发表于2014年&#xff0c;是一个经典的模型&#xff0c;Yoon Kim将卷积神…

Java 中常用的数据结构类 API

目录 常用数据结构API 对应的线程安全的api 高可用衡量标准 常用数据结构API ArrayList: 实现了动态数组&#xff0c;允许快速随机访问元素。 import java.util.ArrayList; LinkedList: 实现了双向链表&#xff0c;适用于频繁插入和删除操作。 import java.util.LinkedLis…

「连载」边缘计算(十九)02-22:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; 从启动函数Start(&#xff09;中可以看到&#xff0c;其以go routine的方式启动很多后台处理服务&#xff0c;具体如下。 1&#xff09;初始化edged的kubeClient&#xff0c;具体如下所示。 // use self defined client to replace fake kube…

深度神经网络中的计算和内存带宽

深度神经网络中的计算和内存带宽 文章目录 深度神经网络中的计算和内存带宽来源原理介绍分析1&#xff1a;线性层分析2&#xff1a;卷积层分析3&#xff1a;循环层总结 来源 相关知识来源于这里。 原理介绍 Memory bandwidth and data re-use in deep neural network computat…

卷积神经网络 CNN

目录 卷积网络与传统网络的区别 参数共享 卷积神经网络整体架构 卷积操作的作用 卷积核的定义 卷积特征值计算方法 卷积层涉及的参数 边缘填充 ​编辑 卷积结果计算 池化层 整体网格架构 VGG网络架构 残差网络Resnet 卷积网络与传统网络的区别 卷积神经网络&#x…

fly-barrage 前端弹幕库(2):弹幕内容支持混入渲染图片的设计与实现

如果弹幕内容只支持文字的话&#xff0c;只需要借助 canvas 绘图上下文的 fillText 方法就可以实现功能了。 但如果想同时支持渲染图片和文字的话&#xff0c;需要以下几个步骤&#xff1a; 设计一个面向用户的数据结构&#xff0c;用于描述弹幕应该渲染哪些文字和图片&#x…

C++ //练习 9.14 编写程序,将一个list中的char*指针(指向C风格字符串)元素赋值给一个vector中的string。

C Primer&#xff08;第5版&#xff09; 练习 9.14 练习 9.14 编写程序&#xff0c;将一个list中的char*指针&#xff08;指向C风格字符串&#xff09;元素赋值给一个vector中的string。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim…

基于ZYNQ的PCIE高速数据采集卡的设计(三)硬件设计

采集卡硬件设计 3.1 引言 采集卡的硬件设计是实现采集功能的基础&#xff0c;良好的硬件设计可以使采集功能更容 易实现&#xff0c;方便软件开发。本章基于第二章的硬件设计方案来详细介绍采集卡硬件设计。 包括载卡和子卡的芯片的选型、配置和具体电路的设计。载卡和子卡…

【计算机网络】应用层自定义协议

自定义协议 一、为什么需要自定义协议&#xff1f;二、网络版计算器1. 基本要求2. 序列化和反序列化3. 代码实现&#xff08;1&#xff09;封装 socket&#xff08;2&#xff09;定制协议和序列化反序列化&#xff08;3&#xff09;客户端&#xff08;4&#xff09;计算器服务端…