树 --- 二叉树

news2024/9/20 8:53:44

树的物理结构和逻辑结构上都是树形结构。

树形结构:由一个根和若干个子节点组成的集合。

最外围的为叶子节点:只有前驱而没有后继。

(一)树的性质

• ⼦树是不相交的
• 除了根结点外,每个结点有且仅有⼀个⽗结点

•度数:一个节点的子树的个数称为该节点的度数,一棵树的度数是指该树中节点的最大度数。

•度:当前节点的子节点为度

•广度:最大节点的度

(二)树的种类

树按照根节点的分支来分,可以分为二叉树和多叉树。下面只介绍二叉树:

二叉树

二叉树(Binary Tree)
定义:每个节点最多有两个子节点的树结构。可以是空树,或者由一个根节点和左、右子树组成。

性质:二叉树广度为2

二叉树又分为满二叉树和完全二叉树

①满二叉树

        满N叉树是一种深度为K的二叉树,其中每一层的节点数都达到了该层能有的最大节点数。如下图:

K层满二叉树节点为2 ^k -1

②完全二叉树

        在满二叉树的基础上,如要删除节点,只能从右至左,从下至上依次删除若干节点。从左至右,从上至下添加节点。

前三种为深度优先遍历算法,层序遍历为广度优先算法

 

注:

只知道一个遍历结果,无法推测一颗唯一的二叉树。

已知前序加中序,可以确定一颗二叉树。

已知后续和中序,可以确定一颗二叉树。

前序遍历:
void pre_order(TNode_t*proot)
{
	if(NULL == proot)
	{
		return ;
	}
	printf("%c ",proot->data);
	pre_order(proot->pl);
	pre_order(proot->pr);
}
中序遍历:
void be_order(TNode_t*proot)
{
	if(NULL == proot)
	{
		return ;
	}
	be_order(proot->pl);
	be_order(proot->pr);
	printf("%c ",proot->data);
}
后序遍历:
void be_order(TNode_t*proot)
{
	if(NULL == proot)
	{
		return ;
	}
	be_order(proot->pl);
	be_order(proot->pr);
	printf("%c ",proot->data);
}
层序遍历:不使用递归
void  large_order(TNode_t*proot)
{
    QDataType outdata;
	Queue_t *pque = create_queue();	
	if (NULL == pque)
	{
		printf("fail create_queue\n");
		return ;
	}

	push_queue(pque, proot);
	while (!is_empty_queue(pque))
	{
		pop_queue(pque, &outdata);
		printf("%c", outdata->data);
		if (outdata->pl != NULL)
		{
			push_queue(pque, outdata->pl);
		}
		if (outdata->pr != NULL)
		{
			push_queue(pque, outdata->pr);
		}
	}

	destroy_queue(pque);
}

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

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

相关文章

每天五分钟玩转深度学习框架PyTorch:将nn的神经网络层连接起来

本文重点 前面我们学习pytorch中已经封装好的神经网络层,有全连接层,激活层,卷积层等等,我们可以直接使用。 如代码所示我们直接使用了两个nn.Linear(),这两个linear之间并没有组合在一起,所以forward的之后,分别调用了,在实际使用中我们常常将几个神经层组合在一起…

【EI会议征稿通知】第十一届机械工程、材料和自动化技术国际会议(MMEAT 2025)

第十一届机械工程、材料和自动化技术国际会议(MMEAT 2025) 2025 11th International Conference on Mechanical Engineering, Materials and Automation Technology 本次大会旨在汇聚全球机械工程、材料科学及自动化技术的创新学者和行业专家&#xff0…

使用 BentoML快速实现Llama-3推理服务

介绍 近年来,开源大模型如雨后春笋般涌现,为自然语言处理领域带来了革命性的变化。从文本生成到代码编写,从机器翻译到问答系统,开源大模型展现出惊人的能力,吸引了越来越多的开发者和企业投身其中。 然而&#xff0…

Subclass-balancing Contrastive Learning for Long-tailed Recognition

文章目录 SCL(supervised contrastive learning)1. 监督对比学习(SCL)的基本概念2. SCL的损失函数3. 长尾数据集的问题4. k-正样本对比学习(KCL)的引入5. 总结 SBCL举例说明:狗的分类 关键点:划分为多个子类…

4-1.Android Camera 之 CameraInfo 编码模板(前后置摄像头理解、摄像头图像的自然方向理解)

一、Camera.CameraInfo Camera.CameraInfo 是用于获取设备上摄像头信息的一个类,它提供摄像头的各种详细信息,例如,摄像头的方向、是否支持闪光灯等,以下是它的常用属性 static int CAMERA_FACING_BACK:表示设备的后置…

Protobuf库的使用

文章目录 Protobuf是什么Protobuf使⽤流程介绍ProtoBuf的使用创建.proto⽂件指定proto3语法package声明符定义消息(message)编译contacts.proto⽂件命令如下:序列化与反序列化的使⽤ Protobuf是什么 ProtoBuf(全称ProtocolBuffer…

数字 FPV 革命 – DJI、Leadcore 和 Artosyn 的三角关系。

人们对 DJI、Caddx FPV 以及 HDZero 等公司最近推出的数字 FPV 系统的起源进行了大量的猜测和推测。随着 Avatar 系统的发布,也有许多人认为它要么使用与 DJI 相同的芯片组,要么是复制品或克隆品。在本文中,我将尝试揭开这一切的神秘面纱&…

python spider novel

python msedgedriver 获取小说 声明:只为学习/练习技术 from lxml import etree from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Optionsimport time# 初始化EdgeOptions, 以…

【系统规划与管理师】【案例分析】【考点】【答案篇】第4章 IT服务规划设计

【问题篇】☞【系统规划与管理师】【案例分析】【考点】【问题篇】第4章 IT服务规划设计 【移动端浏览】☞【系统规划与管理师】【案例分析】【模拟考题】章节考题汇总(第4章)(答案篇)(共38个知识点) 第4章…

《数字信号处理》学习05-单位冲击响应与系统响应

目录 一,单位冲激响应 二,LTI系统对任意序列的系统响应 三,LTI系统的性质 通过上一篇文章《数字信号处理》学习04-离散时间系统中的线性时不变系统-CSDN博客的学习,我已经知道了离散时间线性时不变系统(LTI&#x…

基于 jenkins 的持续测试方案

CI/CD Continuous Integration; Continuous Deployment; 持续集成,将新代码和旧代码一起打包、构建;持续部署,将新构建的包进行部署;持续测试,将新代码、新单元测试一起测试;方案: 公有云DevO…

Python 控制Chrome浏览器使用Selenium4操作点击百度搜索

前面我们讲到如何安装Selenium和ChromeDriver来驱动打开网页,现在我们有一个目的就是使用python来控制chrome浏览器打开百度并搜索 直接先上调试好的代码 from time import sleepfrom selenium import webdriver from selenium.webdriver.common.keys import Keys from selen…

2-88 基于matlab的四叉树加权聚焦多聚焦图像融合

基于matlab的四叉树加权聚焦多聚焦图像融合,的四叉树分解策略将源图像被分解成四叉树结构中具有最佳尺寸的块。在这个树形结构中,使用一种新的加权焦点测量方法(名为加权修正拉普拉斯之和)来检测焦点区域。可以很好地从源图像中提…

1934. 数字游戏(number)

代码 #include<bits/stdc.h> using namespace std; int main() {int ans0,i;string s;cin>>s;for(i0;i<7;i)if(s[i]1)ans;cout<<ans;return 0; } 记得点赞关注收藏&#xff01;&#xff01;&#xff01;谢谢&#xff01;&#xff01;&#xff01;

基于huffman树的文件压缩项目以及相关测试

前言 项目采用Huffman编码的方式进行文件压缩与解压缩。主要原理是通过Huffman编码来表示字符&#xff0c;出现次数多的编码短&#xff0c;出现次数少的编码长&#xff0c;这样整体而言&#xff0c;所需要的bit位是减少的&#xff0c;就实现了文件压缩功能。读取文件中的字符出…

基于大语言模型智能体的自主机器学习

文章介绍了MLR-Copilot框架&#xff0c;这是一种利用大型语言模型&#xff08;LLMs&#xff09;来自动化机器学习研究中创意生成、实验设计和实施过程的方法。该框架分为三个阶段&#xff1a; 首先通过阅读现有研究文献&#xff0c;使用LLM驱动的IdeaAgent来生成研究假设和实验…

PADS Router 入门基础教程(一)

有将近三周没有更新过博客了&#xff0c;最近在整理PADS Router 入门基础教程&#xff0c;希望喜欢本系列教程的小伙伴可以点点关注和订阅&#xff01;下面我们开始进入PADS Router课程的介绍。 一、PADS Router 快捷键 ​ 二、课程介绍 本教程主要介绍&#xff1a;PADS Rou…

电脑安装Winserver2016无法安装网卡驱动(解决办法)

因为工作原因&#xff0c;需要找一台PC机作为服务器去测试软件性能问题&#xff0c;故需要在PC机上安装网卡驱动。 电脑品牌&#xff1a;联想 型号&#xff1a;天逸510Pro-18ICB 操作系统&#xff1a;WindowsServer2016&#xff08;桌面版&#xff09; 问题&#xff1a;系统…

连接池-druid

原因&#xff1a;通过jdbc 创建Connection时比较耗费资源和时间&#xff0c;如果程序每次执行数据库操作都自己创建连接&#xff0c;项目不好控制连接数量&#xff0c;另外程序执行相对耗时。 市面上有很多厂商有连接池组件&#xff0c;目前比较出名的是alibaba druid 以及 Hi…

828华为云征文|华为Flexus云服务器快速上手实例安装“运维搭子”

⭐ 引言 华为云Flexus X实例简介 在现代云计算的世界里&#xff0c;资源的灵活性和性能至关重要。华为云Flexus X实例正是为满足这一需求而诞生的&#xff0c;它代表了云服务器技术的新高度 &#x1f310;&#x1f680;。 华为云Flexus X实例采用了领先的擎天QingTian架构&a…