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

news2024/11/18 3:22:26

目录

  • 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.coloradmin.cn/o/1485277.html

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

相关文章

Redis-基础篇

Redis是一个开源、高性能、内存键值存储数据库,由 Salvatore Sanfilippo(网名antirez)创建,并在BSD许可下发布。它不仅可以用作缓存系统来加速数据访问,还可以作为持久化的主数据存储系统或消息中间件使用。Redis因其数…

从下一代车规MCU厘清存储器的发展(2)

目录 1.概述 2.MCU大厂的选择 2.1 瑞萨自研STT-MRAM 2.2 ST专注PCM 2.3 英飞凌和台积电联手RRAM 2.4 NXP如何计划eNVM 3.小结 1.概述 上篇文章,我们简述了当前主流的存储器技术,现在我们来讲讲各大MCU大厂的技术选择 2.MCU大厂的选择 瑞萨日…

vue2结合electron开发桌面端应用

一、Electron是什么? Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 。允许您保持一个 JavaScript 代码代码库并创建可在Windows、macOS和Linux上运行的跨平台应用 。 Electron 经常与 Ch…

文献阅读笔记《Spatial-temporal Forecasting for Regions without Observations》13页

目录 目录 目录 发行刊物 ABSTRACT 1 INTRODUCTION 2 RELATED WORK(相关工作 2.1 Spatial-temporal Forecasting(时空预测 2.2 Spatial-temporal Forecasting withIncomplete Data(不完全数据的时空预测 2.3 Graph Contrastive Lear…

什么是Vue指令?请列举一些常见的Vue指令以及它们的用法

Vue.js 是一款流行的前端框架,它的指令(Directives)是 Vue.js 提供的一种特殊属性,用于在模板中对 DOM 元素进行直接操作。指令通常是以 v- 开头的特殊属性,用于响应式地将数据绑定到 DOM 元素上。 在 Vue 中&#xf…

VS Code(Visual Studio Code)本地(local)和远程(ssh)Docker Container 下的 Python 开发和调试

VS Code(Visual Studio Code)本地(local)和远程(ssh)Docker Container 下的 Python 开发和调试 1. 目的需求2. VS Code 简介3. 使用实践:一个简单的实例3.1 准备工作3.1.1 远程服务器3.1.2 本地…

测试面试精选题:可用性测试主要测试哪些方面,举例说明

1.界面设计: 评估软件的用户界面设计是否直观、美观、易于理解和操作。 测试用例:打开软件,查看界面布局是否合理,各个功能是否容易找到,是否符合用户习惯。 2.导航和布局: 评估用户在软件中导航和查找…

点云数据结构化与体素化理论学习

一、PCD点云数据存储格式的进一步认识 (一)PCD点云存储格式相较于其它存储格式(如PLY、STL、OBJ、X3D等)的优势[1] (1)具有存储和处理有组织的点云数据集的能力,这对于实时应用和增强现实及机器…

【C++】string 类 ( 上)

标准库中的string类 注意: 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 比特就业课 3. string在底层实际是:basic_string模板类的别名,typedef basi…

Python3零基础教程之数学运算专题初阶

大家好,我是千与编程,在上一节课程我们讲解了Python3基础课程中的变量与数据专题项目,本章节中涉及的Python3编程语言中的基础的四则运算、赋值运算符号,赋值运算符号,比较运算符号,位运算符号的计算方法。 这一章的内容算是比较基础的部分,最后需要学会使用即可。以下是…

飞天使-学以致用-devops知识点2-安装sonarqube

文章目录 安装sonarqube查看暴露出去的端口 生成服务token创建webhook服务创建项目 安装sonarqube apiVersion: apps/v1 kind: Deployment metadata:name: postgres-sonarnamespace: kube-devops spec:replicas: 1selector:matchLabels:app: postgres-sonartemplate:metadata:…

物联网与智慧城市:科技驱动下的城市智能化升级之路

一、引言 随着科技的不断进步和城市化进程的加速,物联网与智慧城市的结合已经成为推动城市智能化升级的关键力量。物联网技术以其强大的连接和数据处理能力,为智慧城市的建设提供了无限可能。本文旨在探讨物联网如何助力智慧城市的构建,以及…

实例驱动计算机网络

文章目录 计算机网络的层次结构应用层DNSHTTP协议HTTP请求响应过程 运输层TCP协议TCP协议面向连接实现TCP的三次握手连接TCP的四次挥手断开连接 TCP协议可靠性实现TCP的流量控制TCP的拥塞控制TCP的重传机制 UDP协议 网际层IP协议(主机与主机)IP地址的分类…

朱维群将出席用碳不排碳碳中和顶层科技路线设计开发

演讲嘉宾:朱维群 演讲题目:“用碳不排碳”碳中和顶层科技路线设计开发 简介 姓名:朱维群 性别:男 出生日期:1961-09-09 职称:教授 1998年毕业于大连理工大学精细化工国家重点实验室精细化工专业&…

【ArcGIS Pro二次开发】(83):ProWindow和WPF的一些技巧

在ArcGIS Pro二次开发中,SDK提供了一种工具界面【ArcGIS Pro ProWindow】。 关于ProWindow的用法,之前写过一篇基础的教程: 【ArcGIS Pro二次开发】(13):ProWindow的用法_arcgispro二次开发教程-CSDN博客 主要是对几个常用控件…

Codeforces Round 930 (Div. 2 ABCDEF题) 视频讲解

A. Shuffle Party Problem Statement You are given an array a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​. Initially, a i i a_ii ai​i for each 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n. The operation swap ( k ) \texttt{swap}(k) swap(k) for an…

Java练习(第5天)【总结】在字符串中寻找特定的字符(5种方法)

问题描述:在字符串中寻找特定字符 1、第1次出现位置 实现函数原型: int indexOf(char c) Java代码: import java.io.*; public class Way_1 {public static void main(String args[]){String str "Geeks for Geeks is a computer s…

智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护)

智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护) 边缘小站的主要功能是管理用户在线下部署的整机柜设施,一个边缘小站关联一个华为云指定的区域和一个用户指定的场地,相关的资源运行状况监控等。 边缘计算 迈入5G和AI时代,新…

【嵌入式实践】【芝麻】【设计篇-2】从0到1给电动车添加指纹锁:项目可行性分析

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹,电动车进入P档等待时计时,计时超过5min则自动锁车,计时过程中按刹车可中断P档状态,同时中断锁车计时。改项目我称之为“芝…

Arcgis重分类

对于一张土地分类图,有时需要改变他的类型对应的值,如何在Arcgis中完成这个操作? 有时候,需要对土地利用类型的水土保持因子P进行赋值,林地、草地赋值给1,水田0.15,旱地0.35,水域、…