【数据结构和算法】根据前序、中序、后序来确定一颗二叉树

目录

  • 0 引言
  • 1 确定二叉树结构的方式
    • 1.1 前序和中序
    • 1.2 后序和中序
    • 1.3 前序和后序:无法确定结构

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:计算机四大基础专栏
  • 📜 其他章节:网络快速入门系列、计网概述、计网应用层详解、计网Web和HTTP、计网FTP、计网EMail、计网DNS、计网P2P
  • 💥 标题:【数据结构和算法 二叉树】根据前序、中序、后序来确定一颗二叉树
  • ❣️ 寄语:不怕苦,吃苦半辈子。怕吃苦,吃苦一辈子!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

最近在学习数据结构和算法,学习到二叉树。自己找到了如何根据前序、中序、后序来确定一颗二叉树结构的快速方法,今天分享出来。

首先了解一下二叉树的递归特性,一颗二叉树把根节点去掉,然后你又可以得到两颗二叉树。以此类推都是二叉树。

  • 前序遍历:首先是输出根节点的数值,然后再是左节点、右节点。所以根据前序遍历可以很容易找到一棵树的根节点,也就是最左侧的数值就是一颗二叉树的根节点。
    • 例如:前序遍历 ABCDEF ,那么可以知道A就是一棵树的跟节点
  • 中序遍历:首先输出的是没有左子树的节点,然后再是自己,然后再输出右子树节点。所以根据中序遍历以及一棵树的根节点可以很容易确定其他节点是左子树还是右子树。
    • 例如:还是和上面同一颗树,中序遍历是CBAEDF,那么根据刚才的前序遍历可以知道A是根节点,那么CB是属于左子树的,EDF是属于右子树的。
  • 后序遍历:首先输出的是左右子树值都输出过的节点,或者是没有左右子树的节点。类似前序遍历,后序遍历可以很快找到树的根节点,也就是最右侧的数值。

1 确定二叉树结构的方式

1.1 前序和中序

前序:ABCDEF
中序:CBAEDF

  1. 根据前序可知 A 为根节点
  2. 然后知道根节点后,再根据中序可以知道 CB 属于左子树, EDF属于右子树。
  3. 然后我们按照递归的思想,将 CB 看作一颗需要重新确定结构的二叉树, EDF 也看作一颗新的二叉树。
  4. 然后根据 BC 的前序顺序可知, B 是树的根节点。然后 根据 CB 的中序顺序可知,C是左子树的节点。
  5. 同理根据 DEF 的前序顺序可知,D是树的根节点。然后根据 EDF 的中序顺序可知,E是左子树,F是右子树。

总结:思想就是把一颗二叉树划分开来,然后从最小的二叉树慢慢确定结构,然后再整合成一颗大的二叉树。

在这里插入图片描述

1.2 后序和中序

后序:BDCAFGE
中序:ABCDEFG

  1. 同理先找到根节点,后序顺序的最右侧就是根节点 E。
  2. 然后根据中序顺序将这颗二叉树,划分成左右子树。左子树:ABCD,右子树:FG。
  3. 然后找到左子树的根节点,左子树后序顺序是BDCA,那么根节点为 A。然后根据中序顺序ABCD得知,BCD组成了一颗新的右子树。然后同理先根据后序找到根节点,再根据中序判断左右子树。
  4. 右子树:FG同理,确定根为G,那么F为G的左子树。

1.3 前序和后序:无法确定结构

前序:ABC
后序:CBA

根据前序和后序,我们只能确定根节点,但是确定不了左右子树。前序和后序类似。

在这里插入图片描述

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

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

相关文章

【MATLAB】语音信号识别与处理:T1小波滤波算法去噪及谱相减算法呈现频谱

1 基本定义 T1小波滤波算法是一种基于小波变换的信号去噪算法。它可以有效地去除信号中的噪声,并保留信号的主要特征。该算法的主要思想是将信号分解为多个不同尺度的小波系数,然后通过对小波系数进行阈值处理来去除噪声。 具体来说,T1小波滤…

算法的时间复杂度及空间复杂度

算法是指操作数据,解决问题的一组方法,就像排序一个无序数组使用不同的排序方法所耗费的时间和空间是不一样的,解决问题使用不同的算法耗费的时间和空间也会大有不同。  接下来我们就来详细了解一下时间复杂度和空间复杂度是如何去考量的。 …

【洛谷学习自留】p5707 上学迟到

解题思路: 1.先用给出的时间和速度(如果无法整除,则时间加一),计算出时间(分),然后将时间加上10分钟。 2.创建一个计时器,设置一个日期,保证时分秒部分&#…

HCIA-Datacom题库(自己整理分类的)_29_PPP协议判断【6道题】

1.数据链路层采用PPP封装链路两端的IP地址可以不在同一个网段。√ 2.PPP链路两端不在同一网段不能通信。 3.参考以下拓扑及配置,路由器R1与R2通过Serial低速线缆连接,且数据链路层封装使用PPP。当R1和R2的Holdtime不一致时,PPP协商失败&…

Docker 创建容器并指定时区

目录 1. 通过环境变量设置时区(推荐)2. 挂载宿主机的时区文件到容器中3. 总结 要在 Docker 容器中指定时区,可以通过两种方式来实现: 1. 通过环境变量设置时区(推荐) 在 Docker 运行时,可以通…

【Godot 4.2】Tree控件与TreeItem完全解析

概述 本篇是控件完全解析系列之一,主要总结一下Tree控件与TreeItem的使用。 Tree控件是一个非常强大的控件,尤其是在编写一些相关的程序或编辑器插件时,非常适合展示树形组织的节点型数据。 本篇将从简单的添加根节点,根节点子…

论文阅读_代码生成模型_CodeGeeX

英文名称: CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X 中文名称: CodeGeeX:一种用于代码生成的预训练模型,并在HumanEval-X上进行多语言评估 链接: https://arxiv.org/abs/2303.17568 代码: http…

深度学习目标检测】二十二、基于深度学习的肺炎检测系统-含数据集、GUI和源码(python,yolov8)

肺炎尽管很常见,但准确诊断是一项困难的任务。它要求训练有素的专家对胸部X光片进行检查,并通过临床病史,生命体征和实验室检查进行确认。肺炎通常表现为胸部X光片上一个或多个区域的阴影(opacity)增加。但是,由于肺部有许多其他状…

【笔记】OpenHarmony和HarmonyOS区别及应用开发简介

一、概念 OpenHarmony(OH) : OpenAtom OpenHarmonyHarmonyOS(HO):开发 | 华为开发者联盟 (huawei.com) HO当前最高是3.1,在华为mate 60上面也是。关于4.0、5.0和next这类版本说法都是面向用户的,不是开发人员。对于程序员&#…

Python爬虫——解析常用三大方式之JsonPath

目录 JsonPath 安装 使用 我们的json数据 基本使用 案例 总结 JsonPath 主要适用于解析一些json的数据 安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ jsonpath 使用 obj json.load(open( json文件 , r , encoding utf-8 ) )ret jsonpath.…

【C++ 函数栈】栈区保存函数参数和函数调用的过程

目录 1 调用过程 🙋‍♂️ 作者:海码007📜 专栏:C专栏💥 标题:【C 函数栈】栈区保存函数参数和函数调用的过程❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧&#xff…

yolov5训练太慢的解决方案

问题原因 训练太慢大多是因为没有安装CUDA和pytorch,导致的只有cpu在跑,显卡没跑 这就是很典型的。 解决方案 第一步:安装CUDA 在本机上面安装CUDA,记住只有N卡可以安装,一开始的电脑是自带CUDA的。 如果不是自带的CUDA&…