数据结构【二叉树】

数据结构之二叉树

  • 二叉树的定义
  • 二叉树的5种基本形态
  • 二叉树的抽象类型定义
  • 二叉树的特殊类型
  • 二叉树的性质
  • 二叉树的存储结构
    • 1、顺序存储
    • 2、链式存储
  • 遍历二叉树
    • 前序遍历
    • 中序遍历
    • 后序遍历
    • 遍历算法的分析
  • 线索二叉树

二叉树的定义

在数据结构中,二叉树是n(n>=0)个节点的有限集,它或者是空集(n=0),或者由一个根节点及两棵互不相交的分别称为左子树和右子树。二叉树通常用于实现搜索和排序算法,同时也可以用于存储表达式和计算表达式的值等应用场景。
完全二叉树:
除了最后一层节点可以不满,其他层节点都必须是满的,最后一层的节点从左到右依次排列,如上左图就是完全二叉树
满二叉树:
除了叶子节点,每个节点都有两个子节点。
特点
1、每个节点最多有两个孩子(二叉树中不存在度大于2的节点)。
2、子树有左右之分,其次序不能颠倒。
3、二叉树可以是空集合,根可以有空的左子树或者空的右子树。
注意 二叉树不是树的特殊情况,他们是两个概念。
在这里插入图片描述
在这里插入图片描述

二叉树的5种基本形态

在这里插入图片描述

二叉树的抽象类型定义

CreateBiTree(&Tdefinition)
初始条件:definition给出二叉树T的定义。
操作结果:按definition构造二叉树T。
PreOrderTraverse(T)
初始条件:二叉树T存在。
操作结果:先序遍历T,对每个结点访问一次。
InOrderTraverse(T)
初始条件:二叉树T存在。
操作结果:中序遍历T,对每个结点访问一次。
PostOrderTraverse(T)
初始条件:二叉树T存在。
操作结果:后序遍历T,对每个结点访问一次。
在这里插入图片描述

二叉树的特殊类型

完全二叉树:
除了最后一层节点可以不满,其他层节点都必须是满的,最后一层的节点从左到右依次排列。叶子只能分布在最大的两层上面。

满二叉树:
除了叶子节点,每个节点都有两个子节点,深度为k的满二叉树,有2的k次幂-1个节点。叶子结点都在最底层。
在这里插入图片描述
满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

二叉树的性质

1、在二叉树的第i层上至多有2的i-1次幂个节点(i>=1);
2、深度为k的二叉树至多有2的k次幂-1个节点(k>=1);
3、对任意一棵二叉树T,如果其叶子数为n0,度为2的节点数为n2,则n0 = n2 + 1;证明如下:
在这里插入图片描述
4、具有n个节点的完全二叉树的深度为 |log2n|+1。
在这里插入图片描述
5、如果对一棵有n个节点的完全二叉树(深度为|log2n|+1)的节点按层序编号(从第1层到第|log2n|+1层,每层从左到右),则对任一节点有:
在这里插入图片描述
示意图:
在这里插入图片描述

二叉树的存储结构

1、顺序存储

按照顺序存储结构的二叉树节点数值如下:
在这里插入图片描述

2、链式存储

链式存储结构的二叉树如下:
在这里插入图片描述

在这里插入图片描述
实现:

struct BTreeNode{elemType data;struct BTreeNode *left, *right;  // 左右孩子指针
};

遍历二叉树

二叉树的遍历是指从二叉树的根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。
1、LDR 中序遍历:左子树—》根节点—》右子树
2、DLR 前序遍历:根节点—》左子树—》右子树
3、LRD 后序遍历:左子树—》右子树—》根节点

前序遍历

定义
前序遍历通俗的说就是从二叉树的根结点出发,当第一次到达结点时就输出结点数据,按照先向左在向右的方向访问。
在这里插入图片描述
在这里插入图片描述

中序遍历

定义
中序遍历就是从二叉树的根结点出发,当第二次到达结点时就输出结点数据,按照先向左在向右的方向访问。
在这里插入图片描述
在这里插入图片描述

后序遍历

定义
后序遍历就是从二叉树的根结点出发,当第三次到达结点时就输出结点数据,按照先向左在向右的方向访问。
在这里插入图片描述
在这里插入图片描述

注意:
已知前序遍历序列和后序遍历序列,不可以唯一确定一棵二叉树。
在这里插入图片描述

遍历算法的分析

在这里插入图片描述
时间效率:O(n) // 每个节点只访问一次
空间效率:O(n) // 栈占用的最大辅助空间

线索二叉树

如果某个结点的左孩子为空,则将空的左孩子指针域改为指向其前驱;如果某结点的右孩子为空,则将空的右孩子指针域改为指向其后继,这种改变指向的指针称为“线索”
加上了线索的二叉树称为线索二叉树(Threaded Binary Tree)。
对二叉树按某种遍历次序使其变为线索二叉树的过程叫线索化。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Databend 开源周报第 101 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 教程 | 使用 AW…

H5 与AI对话聊天框

一&#xff1a;最终实现效果展示 二&#xff1a;具体实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"renderer" content"webkit"><meta http-equiv"X-UA-Compa…

etcd的使用

什么是etcd ETCD是一个分布式、可靠的key-value存储的分布式系统&#xff0c;用于存储分布式系统中的关键数据&#xff1b;当然&#xff0c;它不仅仅用于存储&#xff0c;还提供配置共享及服务发现&#xff1b;基于Go语言实现 。 etcd的特点 完全复制&#xff1a;集群中的每…

opencv-图像处理基础-二值图像

opencv学习01_图像处理基础_二值图像 1&#xff0e;二值图像 二值图像是指仅仅包含黑色和白色两种颜色的图像。 在计算机中&#xff0c;通过一个栅格状排列的数据集&#xff08;矩阵&#xff09;来表示和处理图像。例如&#xff0c;图 2-1 是 一个字母 A 的图像&#xff0c;计算…

Git学习与使用

目录 版本控制、GIT以及SVN常见的版本控制方法本地版本控制集中式版本控制分布式版本控制 SVN与Git的区别 下载与安装Git安装&#xff1a; Git环境配置Git必要的配置 Git的基本理论&#xff08;核心&#xff09;Git项目搭建创建目录 git文件操作忽略文件 使用码云(gitee)辅助学…

RabbitMQ【笔记整理+代码案例】

1. 消息队列 1.1. MQ 的相关概念 1.1.1. 什么是 MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息…

Xcode 更新后 Version 14.3.1报错

File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a Xode版本和pod版本不一致导致&#xff0c;改成一致就可以了 放在podfile文件里,最后一个pod,和最后一个end中间 Showing Recent …

DHCP静态分配IP地址、IP-MAC绑定、静态ARP有哪些区别?

DHCP静态分配IP地址、IP-MAC绑定、静态ARP这三个功能都涉及到IP地址和MAC地址的对应关系&#xff0c;但其应用场景及实现的功能有所不同&#xff0c;如表所示&#xff1a; 原文地址https://support.huawei.com/enterprise/zh/knowledge/EKB1000052241

云计算基础教程(第2版)笔记——基础篇与技术篇介绍

文章目录 前言 第一篇 基础篇 一 绪论 1.1 云计算的概念以及特征 1.1.1云计算的基本概念 1.1.2云计算的基本特征 1.2 云计算发展简史 1.3 三种业务模式介绍 1. 基础设施即服务&#xff08;IaaS&#xff09; 2. 平台即服务&#xff08;PaaS&#xff09; 3. 软…

【高性能、高并发】页面静态化解决方案-OpenResty

OpenResty OpenResty介绍 OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项 用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关 OpenResty通过汇聚各种设计精良的…

css 网站置灰功能

文章目录 filter 属性backdrop-filter 属性mix-blend-mode 属性css 变量低版本浏览器方案 filter 属性 html {filter: gray; /* 兼容 IE6-9 的滤镜 */filter: grayscale(.95); // 对图片进行灰度转换-webkit-filter: grayscale(.95); }backdrop-filter 属性 为一个元素后面区…

ModaHub魔搭社区:开源向量数据库的Milvus怎么读?

Milvus是一个中文词语,意为“Milvus navigate,为智慧找方向,为价值做链接,为创作者做伙伴”。在读这个词语时,可以按照以下方式发音: 首先,我们需要将Milvus这个词语分解成多个音节。根据汉语拼音的规则,可以将其分解为“mi”、“lu”、“su”。 接下来,我们需要根…