当前位置: 首页 > news >正文

树与二叉树(二叉树的表示,性质,遍历,还原)

基本术语:

  • A(或B)是I的祖先,I是A(或B)的子孙;

  • D是I的双亲,I是D的孩子;

  • 节点的孩子个数称为节点的度;

  • 树中节点的最大度数称为树的度;

  • 度大于0的节点称为分支节点,度等于0的节点称为叶节点;

  • 定义树根为第一层,则:树的深度(高度)为5;

二叉树:

定义:

树中的每个节点至多有两个孩子,则该树被称为二叉树。

特殊的二叉树:

满二叉树

高度为h的二叉树,有2^h-1个节点,则为满二叉树。

完全二叉树:

高度为h的树中每个节点都能与高度为h的满二叉树中的节点对应,则该树为完全二叉树。

二叉排序树(二叉搜索树):

左子树上的所有节点的关键字都小于根节点,右子树上的所有节点的关键字都大于根节点的关键字,且左子树和右子树也各为二叉排序树。

平衡二叉树:

树上任意一个节点的左子树深度和右子树深度相差不超过1。

二叉树的性质:

  • 对于非空二叉树,其分支数等于节点数-1(一般树也是这样)。

  • 对于非空二叉树,其叶节点数等于度为2的节点数加1。

证明:

设树中度为0,1,2的节点为n0,n1,n2,树中分支总数为B;

可知B=n2*2+n1;

又因为B=n0+n1+n2-1,所以n0=n2+1;

  • 对于完全二叉树,假设有n个节点,对于编号大于n/2的都是叶子节点。

二叉树的表示:

对于链式存储结构,

我们用结构体来存储二叉树的每个节点:

每个节点保存该节点的数据以及左右孩子的指针。

代码如下:

typedef struct Node{int Data;//数据域struct Node *lchild,*rchild;//左右孩子指针
}BiTNode;

二叉树的遍历:

二叉树有三种遍历方式,如下

先序(前序)遍历:

按照 根->左->右 的方式;

即先输出根,再递归处理左边,再递归处理右边。

代码如下:

void get(BiTree T){if(T!=NULL){visit(T);//访问根get(T->lchild);//递归处理左边get(T->rclild);//递归处理右边}
}

中序遍历:

按照 左->根->右的顺序。

后序遍历:

按照 左->右->根的顺序。

由遍历序列还原二叉树:

根据二叉树的前序、后序和二叉树的中序遍历组合,便可唯一的还原出二叉树

由前序和中序还原:

已知前序遍历的第一个元素为树的根节点R;

我们在中序遍历中找出R,则R的左边为左子树,右边为右子树;

由左子树和右子树的节点数量我们也可以在前序遍历序列中找到左子树和右子树;

最后递归处理左右子树即可。

相关文章:

树与二叉树(二叉树的表示,性质,遍历,还原)

基本术语:A(或B)是I的祖先,I是A(或B)的子孙;D是I的双亲,I是D的孩子;节点的孩子个数称为节点的度;树中节点的最大度数称为树的度;度大于0的节点称为…...

mysql 源码学习理解记录--lock_rec_move

记录源码学习笔记,如有错误,还请帮忙指正。 Lock_rec_move 函数使用场景之用于update Update 匹配条件时会用lock_rec_lock先加锁。然后再进行ha_update_row 操作。 在修改时,当修改的字段前后长度不一致时,会导致不能原地修改…...

markdown(.md)常用语法

markdown(.md)常用语法markdown常用语法常用目录标题分割线格式空格换行无序列表有序列表列表嵌套文字引用行内代码代码块字体转义斜体加粗删除线下划线功能链接todo listtypora插入图片并保存在本地包含了一些常用的MD语法和操作,语法不是很…...

千言数据集赛题介绍

赛题题目 通用信息抽取任务评测 将多种不同的信息抽取任务用统一的通用框架进行描述,着重考察相关技术方面在面对新的、未知的信息抽取任务与范式时的适应和迁移能力。 赛题介绍 信息抽取旨在将非结构化文本中的信息进行结构化,是自然语言处理的基础…...

信息技术最全总结(备考教资)

信息技术 备考教资信息技术知识点总结,欢迎收藏!需要xmind和备考书籍的可以评论区留言。 第一部分-学科专业知识 第一章-信息技术基础知识 信息与信息技术概述 信息概述 信息的定义 信息本身不是实体信息是通过文字、数字、图像、图形、声音、视频等方…...

opencv识别车道线(霍夫线变换)

目录1、前言2、霍夫线变换2.1、霍夫线变换是什么?2.2、在opencv中的基本用法2.2.1、HoughLinesP函数定义2.2.2、用法3、识别车道3.1、优化3.1.1、降噪3.1.2、过滤方向3.1.3、截选区域3.1.4、测试其它图片图片1图片2图片31、前言 最近学习opencv学到了霍夫线变换&am…...

MySQL的同步数据Replication功能

MySQL提供了Replication功能,可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库(master),后者则被称从库(slave)。MySQL复制过程采用异步方式,但延时非常小,秒级…...

2023年全国最新高校辅导员精选真题及答案17

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.完善大学生的自我意识,我们可以采取的措施是()。 …...

中文代码92

PK 嘚釦 docProps/PK 嘚釦諿hl | docProps/app.xml漅Mo?糤?皘幅H??Q州濾mじ沜咅K宩Z5~q矹阶浇?灭貄}鰜>hk?i灐Q墩娲蝊毲b檊!J邮?\鏶 鵉苻牢[?j Y?a漺1簕B傟p悺L睮恃鶤?龎劂Q|瓣} A??苷0???5m?髤咄佶?\/#姧1N_??熹 冟.琽僠糧固Pw襅…...

Python SEO采集海量文本标题,用倒排索引找出“类似的标题“代码实现

Python SEO采集海量文本标题,用倒排索引找出“类似的标题“代码实现 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、说明 假设这个是采集到的海量文本标题: 现在要判断找到的这个标题 title = "拜登称特朗普拒绝承认选举…...

模型杂谈:快速上手元宇宙大厂 Meta “开源泄露”的大模型(LLaMA)

本篇文章聊聊如何低成本快速上手使用 Meta(Facebook)的开源模型 LLaMA。 写在前面 在积累点赞,兑现朋友提供的显卡算力之前,我们先来玩玩“小号的”大模型吧。我相信 2023 年了,应该不需要再赘述如何使用 Docker 干净…...

RedisCluster集群模式下master宕机主从切换期间Lettuce连接Redis无法使用报错Redis command timed out的问题

背景springboot使用redisTemplate访问redis cluster(三主三从),底层是Lettuce,当其中一个master挂掉后,slave正常升为master,程序报错 Redis commond timed out after 6 seconds。解决手动连接集群&#xf…...

Xuetr杀毒工具使用实验(28)

实验目的 (1)学习Xuetr的基本功能; (2)掌握Xuetr的基本使用方法。预备知识 windows操作系统的基本知识如:进程、网络、服务和文件等的了解。 XueTr是近年推出的一款广受好评的ARK工具。ARK工具全称为Anti R…...

fastapi(https)+openssl+测试(双向校验)

第一步生成根证书 # Generate CA private key openssl genrsa -out ca.key 2048 # Generate CSR openssl req -new -key ca.key -out ca.csr # Generate Self Signed certificate(CA 根证书) openssl x509 -req -days 365 -in ca.csr -signkey ca.key -o…...

TiDB Server

文章目录TiDB Server架构TiDB Server作用TiDB Server的进程SQL语句的解析和编译SQL读写相关模块在线DDL相关模块GC机制与相关模块TiDB Server的缓存热点小表缓存TiDB Server架构 Protocol Layer、Parse、Compile负责sql语句的解析编译和优化,然后生成sql语句执行计划…...

S3C2440移植Linux4.19.275内核以及过程中遇到的问题

目录 1 问题一:内核移植时MTD分区问题 2 问题二:uboot的MTDPARTS_DEFAULT定义的MTD分区,bootargs中的文件系统分区,内核的mtd_partition smdk_default_nand_part定义的分区,三者要对应起来 3 问题三:ubo…...

解忧杂货铺(二):UML时序图

目录 1、概述 2、UML时序图 2.1、什么是时序图 2.2、时序图的元素 2.2.1 角色(Actor) 2.2.2 对象(Object) 2.2.3 生命线(LifeLine) 2.2.4 控制焦点(Activation) 2.2.5 消息(Message) 2.2.6 自关联消息 2.2.7 组合片段 1、概述 在看AUTOSAR规范的时候发现时序图里面的…...

微信小程序的代码由哪些结构组成?

小程序官方建议把所有小程序的页面,都存放在pages 目录中,以单独的文件夹存在,如图所示: 其中,每个页面由4 个基本文件组成,它们分别是:js文件(页面的脚本文件,存放页面的数据、事件…...

Cloud Kernel SIG月度动态:发布 ANCK 新版本及 Plugsched v1.2.0

Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 2 月 SIG 整体进展 发布 ANCK 4.19.91-27.1 版本。 发布 ANCK 5.10.134-13.1 版本。 调度器热升级相关事…...

Jedis 使用详解(官方原版)

一、配置 Maven 依赖项Jedis也通过Sonatype作为Maven Dependency 分发。要配置它&#xff0c;只需将以下 XML 代码段添加到您的 pom.xml 文件中。<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.…...

STM8/STM32 GPIO触摸按键实现与优化

基于STM8/STM32的GPIO触摸按键实现技术解析1. 触摸按键技术概述1.1 传统方案与MCU实现对比在消费类电子产品中&#xff0c;触摸按键的实现通常有两种主流方案&#xff1a;专用触摸IC方案&#xff1a;集成度高但成本较高MCU GPIO方案&#xff1a;利用通用微控制器实现&#xff0…...

FOSUserBundle配置参考:所有参数详解与最佳配置方案

FOSUserBundle配置参考&#xff1a;所有参数详解与最佳配置方案 【免费下载链接】FOSUserBundle Provides user management for your Symfony project. Compatible with Doctrine ORM & ODM, and custom storages. 项目地址: https://gitcode.com/gh_mirrors/fo/FOSUserB…...

终极AI图像增强神器Upscayl:让每一张照片重获新生

终极AI图像增强神器Upscayl&#xff1a;让每一张照片重获新生 【免费下载链接】upscayl &#x1f199; Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trending…...

从标准到实战:网络变压器在POE应用中的AF/AT/BF/BT详解与电路设计指南

1. 网络变压器在POE系统中的核心作用 第一次接触POE供电系统时&#xff0c;我对着电路板上那个带铁壳的方形元件研究了半天——这就是网络变压器。它看起来平平无奇&#xff0c;却是整个POE系统的"心脏"。简单来说&#xff0c;网络变压器在POE系统中要同时干两件事&a…...

ComfyUI-Easy-Use:如何高效管理GPU资源并优化深度学习推理性能

ComfyUI-Easy-Use&#xff1a;如何高效管理GPU资源并优化深度学习推理性能 【免费下载链接】ComfyUI-Easy-Use In order to make it easier to use the ComfyUI, I have made some optimizations and integrations to some commonly used nodes. 项目地址: https://gitcode.c…...

并发编程进阶:volatile、内存屏障与 CPU 缓存机制详解

知识点回顾 1. 什么是CQRS&#xff1f; CQRS是Command Query Responsibility Segregation的缩写&#xff0c;一般称作命令查询职责分离。从字面意思理解&#xff0c;就是将命令&#xff08;写入&#xff09;和查询&#xff08;读取&#xff09;的责任划分到不同的模型中。 对比…...

ms-swift框架实战:从零构建高效Embedding微调流水线

1. 为什么需要定制Embedding模型&#xff1f; 在智能客服问答匹配这类场景中&#xff0c;预训练的通用Embedding模型往往表现不佳。我去年做过一个电商客服项目&#xff0c;直接用开源Embedding模型处理"怎么退货"这类问题时&#xff0c;会把"如何退款"、&…...

JavaScript DXF Writer:三步实现浏览器CAD图纸生成的终极方案

JavaScript DXF Writer&#xff1a;三步实现浏览器CAD图纸生成的终极方案 【免费下载链接】js-dxf JavaScript DXF writer 项目地址: https://gitcode.com/gh_mirrors/js/js-dxf JavaScript DXF Writer是一个简单易用的JavaScript库&#xff0c;专门用于在浏览器和Node.…...

效率提升秘籍:用快马平台快速生成魔鬼面具试戴应用代码骨架

效率提升秘籍&#xff1a;用快马平台快速生成魔鬼面具试戴应用代码骨架 最近在做一个有趣的个人项目——魔鬼面具在线试戴应用。作为一个前端开发者&#xff0c;我深知从零开始搭建这种交互式应用需要花费不少时间在基础框架上。幸运的是&#xff0c;我发现了InsCode(快马)平台…...

SD2.0时钟与时序:从基础模式到高速传输的实战解析

1. SD2.0时钟与时序基础入门 第一次接触SD2.0规范时&#xff0c;我也被那些密密麻麻的时序参数搞得头晕眼花。直到在项目里实际调试SD卡读写失败的问题后&#xff0c;才发现理解时钟和时序的配合有多重要。简单来说&#xff0c;时钟就像两个人对话的节奏&#xff0c;而时序则是…...