C++关于树的基础知识

首先区分概念

“度为m的树”指的是至少有一个结点的度是m,一定是非空树

“m叉树”指的是允许所有的结点都小于m,且可以是空树

常见考点:

度为m的树的第i层最多有m^{i-1}个结点  (对于m叉树也相同)

第一层m的0次方

第二层m的1次方

第三层m的2次方

第四层m的3次方

 高度为h的m叉树最多有\frac{^{m^{h}}-1}{m-1}个结点

 对于高度为h的m叉树至少有h个结点(每层只有一个结点)

对于高度为h的度为m的树至少有h+m-1个结点

 对于具有n个结点的m叉树的最小高度为\log _{m}(n(m-1)+1)

不用死记硬背:n<\frac{^{m^{h}}-1}{m-1}推导即可

 


二叉树

可能存在的五种形态:空二叉树、只有左子树(右子树为空)、只有右子树(左子树为空)、只有根节点、左右子树都有

满二叉树:一颗高度为h,且具有2^{h}-1个结点的二叉树

·只有最后一层有叶子结点

·不存在度为1 的结点

·从根节点开始从1编号,结点i的父节点为[i/2]

完全二叉树是一种特殊类型的二叉树,其中树的所有级别都被完全填充,除了最低级别的节点从尽可能左侧填充之外。

另外可以理解为:遍历一个完全二叉树的所有结点都能在满二叉树中找到一一对应的结点,满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树

·只有最后两层有叶子节点

·最多只有一个度为1的结点

·从根节点开始从1编号,结点i的父节点为[i/2]

·i<=[n/2]为分支结点,i>[n/2]为叶子结点  ,其中n为最大的结点数

·如果某一个结点只有一个子节点,那么其一定是左子节点

二叉排序树。左子树上的所有结点关键字都小于根节点的关键字

右子树上的所有结点的关键字都大于根节点的关键字

同时左子树和右子树又各是一颗二叉排序树

平衡二叉树。树上的任一结点的左子树和右子树的深度之差不超过1

如果一个二叉排序树是一个平衡二叉树,则其搜索效率要高很多

二叉树考点

1、设非空二叉树中度为0、1和2的结点个数分别为n0、n1和n2,如n0=n2+1(叶子结点的个数要比二分支结点的个数多1个)

2、二叉树的第i层最多有2^{i-1}个结点

3、高度为h的二叉树最多有2^{^{h}}-1个结点

4、具有n个结点的完全二叉树的高度h为\log {_{2}}(n+1))

5、对于一个完全二叉树,给出了结点n的个数,可以直接推算出度为0\1\2的结点个数n0\n1\n2

        推到过程: 完全二叉树最多只会有一个度为1的结点,即n1=0或1

                        n0 = n2 +1,则叶子结点和双分支结点(度为2的结点)的总和、差都是奇数

                        如果一个完全二叉树给出的总结点个数是偶数个(2k),则n0=k,n1=1,n2=k-1

                        如果一个完全二叉树给出的总结点个数是奇数个(2k-1),则n0=k,n1=0,n2=k-1

对于一个完全二叉树,给定总结点的个数num,则n0= num/2 , n2 = n0-1  ,如果num是偶数,则n1= 1 , 如果Num是奇数, 则n1 = 0;

 6、对于顺序存储的二叉树的结点i ,其

左子结点:2i

右子结点:2i+1 

父节点: [i/2]

i所在的高度h : log2(n+1)\log {_{2}}(n+1))\log {_{2}}(n+1))

 对于完全二叉树,总结点数n:


判断i是否有左子节点:2i<=n?

判断i是否有右子节点:2i+1<=n?

判断是否是叶子结点还是分支结点: i 与[n/2]对比

对于完全二叉树,要有结点数与分支结点数对半分割的思想:


二叉树遍历方式:

先序遍历:根-左-右: A-BDE-CFG

中序遍历:左-根-右:DBE-A-FCG

后序遍历:左-右-根:DEB-FGC-A

 

先序遍历:根-左-右:A-BDGE-CF

中序遍历:左-根-右:DGBE-A-FC   (G是右节点)

后序遍历:左-右-根:GDEB-FC-A

求取数的深度:

int treeDepth (BiTree T){if(T==NULL){return 0;}
}else {int l = treeDepth(T->lchild)int r = treeDepth(T->rchild)return l>r ? l+1 :r+1;
}

层序遍历:

思想:初始化一个队列queue,让根节点入队,如果队列Q非空,则pop一个元素并读取访问,将其指向的左子节点和右子节点插入队列,然后重复上述

struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x),left(NULL),right(NULL){}
}
void levelOrder(TreeNode* root)
{if(root ==NULL ) return ;queue<TreeNode*> q;q.push(root);while(!q.empty()){TreeNode* cur = q.front();q.pop();//输出当前结点的值cout <<cur ->val <<endl;        if(cur->left !=NULL){q.push(cur->left);}if(cur->right!=NULL)    {q.push(cur->right);}}
}

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

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

相关文章

电池大师 2.3.9 | 专业电池管理,延长寿命优化性能

Battery Guru 显示电池使用情况信息&#xff0c;测量电池容量&#xff08;mAh&#xff09;&#xff0c;并通过有用技巧帮助用户改变充电习惯&#xff0c;延长电池寿命。支持显示电池健康状况&#xff0c;优化电池性能。 大小&#xff1a;9.6M 百度网盘&#xff1a;https://pan…

多模态大语言模型(MLLM)-InstructBlip深度解读

前言 InstructBlip可以理解为Blip2的升级版&#xff0c;重点加强了图文对话的能力。 模型结构和Blip2没差别&#xff0c;主要在数据集收集、数据集配比、指令微调等方面下文章。 创新点 数据集收集&#xff1a; 将26个公开数据集转换为指令微调格式&#xff0c;并将它们归类…

创建osd加入集群

故障原因&#xff1a;ceph节点一个磁盘损坏&#xff0c;其中osd69 down了&#xff0c;需要更换磁盘并重新创建osd加入ceph集群。 信息采集&#xff1a; 更换磁盘前&#xff0c;查询osd69对应的盘符&#xff1a; 将对应的故障磁盘更换后&#xff0c;并重做raid&#xff0c;然后查…

≌图概念凸显有长度不同的射线

黄小宁 【摘要】自有射线概念后的2300年里一直无人能知有长度不同的射线、无人能知有互不≌的射线&#xff0c;从而使数学一直有几何“常识”&#xff1a;任何射线都没有长度差别。保距变换和≌图概念使人能一下子看到有长度不同的射线。 变量x所取各数也均由x代表&#xff0c…

1. Keepalived概念和作用

1.keepalived概念 (1)解决单点故障(组件免费) (2)可以实现高可用HA机制 (3)基于VRR协议(虚拟路由沉余协议) 2.keepalived双机主备原理

DockerCompose 启动 open-match

背景介绍 open-match是Google和unity联合开源的支持实时多人匹配的框架&#xff0c;已有多家游戏厂商在生产环境使用&#xff0c;官网 https://open-match.dev/site/ 。原本我们使用的是UOS上提供的匹配能力&#xff0c;但是UOS目前不支持自建的Dedicated servers 集群&#x…

ai论文写作软件哪个好?分享5款ai论文题目生成器

在当前的学术研究和写作领域&#xff0c;AI论文写作软件已经成为提高效率和质量的重要工具。根据多个来源的评测和推荐&#xff0c;以下是五款值得推荐的AI论文写作软件&#xff0c;其中特别推荐千笔-AIPassPaper。 1. 千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和…

【第2章 开始学习C++】C++语句

文章目录 导语声明语句和变量赋值语句cout的新花样使用cin类简介 导语 C 程序是一组函数&#xff0c; 而每个函数又是一组语句。 C 有好几种语句&#xff0c;例如&#xff1a;声明语句创建变量&#xff0c; 赋值语句给该变量提供一个值。 声明语句和变量 计算机是一种精确的…

HCIA——one

推荐电影&#xff1a;《模仿游戏》《黑客帝国》《头号玩家》 图灵机每秒五千次计算&#xff0c;当今计算机4080ti算力每秒21万亿次的计算。 OSI七层模型 应用层&#xff1a;人机交互&#xff0c;将抽象语言转换成编码 表示层&#xff1a;将编码转换成二进制 介质访问控制层…

Chatgpt 原理解构

一、背景知识 1. 自然语言处理的发展历程 自然语言处理在不同时期呈现出不同的特点和发展态势。萌芽期&#xff0c;艾伦・图灵在 1936 年提出 “图灵机” 概念&#xff0c;为计算机诞生奠定基础&#xff0c;1950 年他提出著名的 “图灵测试”&#xff0c;预见了计算机处理自然…

国内经典多模态大模型工作1——Qwen-VL系列(Qwen-VL、Qwen2-VL解读)

Qwen-VL 论文标题&#xff1a;《Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond》 论文链接&#xff1a;https://arxiv.org/pdf/2308.12966.pdf 项目&#xff1a;https://github.com/QwenLM/Qwen-VL/tree/master 模…

DAMA数据管理知识体系(第13章 数据质量)

课本内容 13.1 引言 语境图 图13-1 语境关系图&#xff1a;数据质量业务驱动因素 1&#xff09;提高组织数据价值和数据利用的机会。2&#xff09;降低低质量数据导致的风险和成本。3&#xff09;提高组织效率和生产力。4&#xff09;保护和提高组织的声誉。 提机会、降成本、增…

3D看车如何实现?有哪些功能特点和优势?

3D看车是一种创新的汽车展示方式&#xff0c;它利用三维建模和虚拟现实技术&#xff0c;将汽车以更真实、更立体的形式呈现在消费者面前。 一、3D看车的实现方式 1、三维建模&#xff1a; 通过三维建模技术&#xff0c;按照1:1的比例还原汽车外观&#xff0c;包括车身线条、细…

yolov8/9/10/11模型在中医舌苔分类识别中的应用【代码+数据集+python环境+GUI系统】

yolov8、9、10、11模型在中医舌苔分类识别中的应用【代码数据集python环境GUI系统】 背景意义 目前随着人们生活水平的不断提高&#xff0c;对于中医主张的理念越来越认可&#xff0c;对中医的需求也越来越多。 传统中医的舌诊主要依赖于医生的肉眼观察&#xff0c;仅仅通过这…

大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

《Programming from the Ground Up》阅读笔记:p181-p216

《Programming from the Ground Up》学习第10天&#xff0c;p181-p216总结&#xff0c;总计34页。 一、技术总结 第10章主要讲计算机是如何计算的&#xff0c;如十进制、二进制、八进制、十六进制以及浮点数和负数的表示。属于比较基础的内容&#xff0c;如果有一定基础&…

(Linux和数据库)1.Linux操作系统和常用命令

了解Linux操作系统介绍 除了办公和玩游戏之外不用Linux&#xff0c;其他地方都要使用Linux&#xff08;it相关&#xff09; iOS的本质是unix&#xff08;unix是付费版本的操作系统&#xff09; unix和Linux之间很相似 Linux文件系统和目录 bin目录--放工具使用的 操作Linux远程…

2023 CCPC哈尔滨 报告

比赛链接&#xff1a;Dashboard - 10.6组队训练赛-2023CCPC哈尔滨站 - Codeforceshttps://codeforces.com/group/w6iGs8kreW/contest/552949 做题数&#xff1a;3 题 三题都是队友写的。所以来补一下 B L J。 B题&#xff1a; B. Memory Little G used to be a participant …

计算机毕业设计 内蒙古旅游景点数据分析系统的设计与实现 Python毕业设计 Python毕业设计选题 Spark 大数据【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Http 协议和 RPC 协议有什么区别?

Http 协议和 RPC 协议有什么区别&#xff1f; 三个层面来述说&#xff1a; 从功能特性来说&#xff1a; HTTP是一个属于应用层的超文本传输协议&#xff0c;是万维网数据通信的基础&#xff0c;主要服务在网页端和服务端的数据传输上。 RPC是一个远程过程调用协议&#xff0…