数据结构===二叉树

文章目录

  • 概要
  • 二叉树的概念
  • 分类
  • 存储
  • 遍历
    • 前序
    • 中序
    • 后序
  • 小结

概要

简单写下二叉树都有哪些内容,这篇文章要写什么

  1. 二叉树的概念
  2. 分类,都有哪些
  3. 二叉树遍历

对一个数据结构,最先入手的都是定义,然后才会有哪些分类,对二叉树这个数据结构来说,遍历很有用。接下来看看。

二叉树的概念

二叉树的相关概念

二叉树是每个节点最多只有两个分支,分别叫“左子树”,“右子树”。一般是父节点>左子树 而且 父节点<右子树。

分类

基础概念有了,看看都有哪些种类

看过基础概念,再来看看都有哪些二叉树。主要有以下几种:
1. 满二叉树
2. 完全二叉树

什么是满二叉树呢?在二叉树中,叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个子节点,这种二叉树就叫做满二叉树。如下图:

在这里插入图片描述
再来看看完全二叉树。在二叉树中,叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大。这样的二叉树是完全二叉树。如下图:

在这里插入图片描述
如上图,左边是完全二叉树,右边不满足条件,是非完全二叉树。

存储

按照存储划分有哪些?
其他的数据结构聊过,都是数组和链表的存储划分。二叉树这么划分,可以分为顺序存储法和链式存储法。

遍历

二叉树的遍历

对于二叉树这种非线性结构,遍历有前序,中序,后序三种遍历方式。

前序

前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。

递推公式:
前序遍历的递推公式:
preOrder® = print r->preOrder(r->left)->preOrder(r->right)

void preOrder(Node* root) {if (root == null) return;print root // 此处为伪代码,表示打印root节点preOrder(root->left);preOrder(root->right);
}

中序

中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。

中序遍历的递推公式:
inOrder® = inOrder(r->left)->print r->inOrder(r->right)

void inOrder(Node* root) {if (root == null) return;inOrder(root->left);print root // 此处为伪代码,表示打印root节点inOrder(root->right);
}

后序

后序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它的右子树,最后打印这个节点本身。

后序遍历的递推公式:
postOrder® = postOrder(r->left)->postOrder(r->right)->print r


void postOrder(Node* root) {if (root == null) return;postOrder(root->left);postOrder(root->right);print root // 此处为伪代码,表示打印root节点
}

小结

二叉树的数据结构

这一篇主要写了二叉树的概念,分类,完全二叉树,满二叉树;按照存储划分顺序存储,链式存储;遍历有三种方式:前序,中序,后序;基本上就这么多了。OK,翻篇。

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

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

相关文章

【Python】字符串

1. 字符串读取、拼接、匹配、随机生成 2. ‘’.join()连接字符串 3. 使用了random随机函数 4. 字符串列表里面使用判断语句调用函数 1、输入一个字符串,将该字符串中下标为偶数的字符组成新串并通过字符串格式化方式显示。 def get_even_indexed_chars(s):# 使用…

docker Harbor私有仓库部署管理

搭建本地私有仓库&#xff0c;但是本地私有仓库的管理和使用比较麻烦&#xff0c;这个原生的私有仓库并不好用&#xff0c;所以我们采用harbor私有仓库&#xff0c;也叫私服&#xff0c;更加人性化。 一、什么是Harbor Harbor是VWware 公司开源的企业级Docker Registry项…

TypeScript 基础学习笔记:interface 与 type 的异同

TypeScript 学习笔记&#xff1a;interface 与 type 的异同 &#x1f3a3; 引言 在 TypeScript的世界里&#xff0c;精准的类型定义是保证代码质量与团队协作效率的关键。interface 和 type 作为两种核心的类型定义工具&#xff0c;它们各自承载着不同的设计意图与应用场景。本…

分布式与一致性协议之ZAB协议(二)

ZAB协议 ZAB协议是如何实现操作地顺序性的&#xff1f; 如果用一句话解释ZAB协议到底是什么&#xff0c;我觉得它是能保证操作顺序性的、基于主备模式的原子广播协议。 接下来&#xff0c;还是以指令X、Y为例具体演示一下&#xff0c;帮助你更好地理解为什么ZAB协议能实现操作…

解决一个朋友的nbcio-boot的mysql数据库问题

1、原先安装mysql5.7数据库&#xff0c;导入我的项目里的带数据有报错信息 原因不明 2、只能建议用docker进行msyql5.7的安装 如下&#xff0c;可以修改成自己需要的信息 docker run -p 3306:3306 --name mastermysql -v /home/mydata/mysql/data:/var/lib/mysql -e MYSQL_R…

Pycharm安装包numpy和matplotlib安装

环境 python 3.12 Pycharm 2023.1 安装包 创建图表的 numpy 库和 matplotlib 库 安装过程出现的问题 setuptools工具包没有安装 Python packaging tool setuptools not found文件 -> 设置 -> 项目:xxx -> python解释器界面显示不出已安装的软件包&#xff0c;系…

Vue3+.NET6前后端分离式管理后台实战(十七)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(十七)已经在微信公众号更新&#xff0c;有兴趣的扫码关注一起交流学习。

03 - 步骤 Kafka producer

简介 Kafka producer 步骤&#xff0c;用于将 Kettle 中经过处理或转换的数据发送到 Kafka 的主题中 使用 场景 我需要把经过Kettle处理完的数据发送到一个Kafka中&#xff0c;让后端服务器进行下一步处理。 1、拖拽 Kafka producer 到面板 2、配置 Kafka producer 3、调试…

一、写给Android开发者之harmony入门

一、创建新项目 对比 android-studio&#xff1a;ability类似安卓activity ability分为两种类型(Stage模型) UIAbility和Extensionability&#xff08;提供系统服务和后台任务&#xff09; 启动模式 1、 singleton启动模式&#xff1a;单例 2、 multiton启动模式&#xff1…

TinTin Web3 Bounty 挑战杯第二期再启程,NEAR 生态邀请你来找 Bug!

对 Web3 来说&#xff0c;Bounty 任务应该是普通人获得行业“一杯羹”的重要捷径&#xff01; 通过深入学习各类 Web3 公链技术&#xff0c;凭借实战锻炼开发创新项目&#xff0c;或完善已有网络运行中出现的问题&#xff0c;就有机会更加快速了解其底层技术逻辑&#xff0c;更…

笔记:编写程序,绘制一个展示支付宝月账单报告的饼图

文章目录 前言一、饼图是什么&#xff1f;二、编写代码总结 前言 笔记&#xff1a;编写程序&#xff0c;绘制一个展示支付宝月账单报告的饼图 &#xff08;1&#xff09; 导入 matplotlib.pyplot 模块&#xff1b; &#xff08;2&#xff09; 准备饼图所需的数据&#xff1b; …

在Node.js(express 框架)中使用 nodemailer 实现邮箱注册功能

文章目录 一、准备工作1、安装 nodemailer2、打开 QQ(此处使用QQ邮箱) 的 IMAP/SMTP服务 二、功能实现1、发送邮件功能封装2、生成随机验证码3、发送邮箱验证码4、注册功能 三、邮件接收消息展示四、参考资料 一、准备工作 1、安装 nodemailer yarn add nodemailer 2、打开 QQ…