数据结构--二叉树的先中后序遍历

news2024/11/19 13:34:50

数据结构–二叉树的先中后序遍历

二叉树的遍历

层次遍历

层次遍历:基于树的层次特性确定的次序规则

二叉树的递归特性:
①要么是个空二叉树
②要么就是由“根节点+左子树+右子树”组成的二叉树

先 \color{red}先 序遍历: 根 \color{red}根 左右( N \color{red}N NLR)
中 \color{red}中 序遍历:左 根 \color{red}根 右(L N \color{red}N NR)
后 \color{red}后 序遍历:左右 根 \color{red}根 (LR N \color{red}N N

序遍历:
A B D G E C F
中序遍历:
D G B E A F C
后序遍历:
G D E B F C A

算数表达式的“分析树”

先序遍历: -+ab-cd/ ef
中序遍历: a+b
c-d-e/f
后序遍历: abcd-*+ef/-

先序遍历→前缀表达式
中序遍历→中缀表达式(需要加界限符)
后序遍历→后缀表达式

先序遍历代码

先序遍历 \color{red}先序遍历 先序遍历(PreOrder)的操作过程如下:
1.若二叉树为空,则什么也不做;
2.若二叉树非空:
①访问根结点;
②先序遍历左子树;
③先序遍历右子树。 \color{red}③先序遍历右子树。 先序遍历右子树。

void PreOrder(BiTree T)
{
    if (T != NULL)
    {
        visit(T); //访问根结点
        PreOrder(T->lchild); //递归遍历左子树
        PreOrder(T->rchild); //递归遍历右子树
    }
}

中序遍历代码

] 中序遍历 ]\color{red}中序遍历 ]中序遍历(InOrder)的操作过程如下:
1.若二叉树为空,则什么也不做;
2.若二叉树非空:
①中序遍历左子树;
②访问根结点 ; \color{red}②访问根结点; 访问根结点;
③中序遍历右子树。

void InOrder(BiTree T)
{
    if (T != NULL)
    {
        InOrder(T->lchild); //递归遍历左子树
        visit(T); //访问根结点
        InOrder(T->rchild); //递归遍历右子树
    }
}

后序遍历代码

后序遍历 \color{red}后序遍历 后序遍历 ( PostOrder)的操作过程如下:
1.若二叉树为空,则什么也不做;
2.若二叉树非空:
①后序遍历左子树;
②后序遍历右子树;
③访问根结点。 \color{red}③访问根结点。 访问根结点。

void PostOrder(BiTree T)
{
    if (T != NULL)
    {
        PostOrder(T->lchild); //递归遍历左子树
        PostOrder(T->rchild); //递归遍历右子树
        visit(T); //访问根结点
    }
}

求树的深度(应用)

int treeDepth(BiTree T)
{
    if (T == NULL)  return 0;
    int l = treeDepth(T->lchild);
    int r = treeDepth(T->rchild);
    //树的深度=Max(左子树深度,右子树深度)+1
    return l > r ? l + 1 : r + 1;
}

知识点回顾与重要考点

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

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

相关文章

springboot 集成log4j日志,需要自定义json格式内容输出方便ES采集

背景 公司需要将服务迁移到K8S环境上,由于目前服务输出的格式不符合ES进行采集的日志格式,所有需要将日志输出的格式进行调整为JSON格式,方便ES采集 遇到的坑 之前是直接配置的输出格式的message为"message": %msg"&#x…

记录一下,linux安装环境步骤。

前文 鉴于之前都是下载压缩包方式安装环境,学习了docker之后,决定将服务器初始化,重新用docker安装相应环境 条件:自己买的阿里云centos系统。单核系统,仅学习使用。 初始化云盘 初始化云盘步骤: 1&…

Perfetto 命令行工具(Android 10 及更高版本)

Perfetto 命令行工具(Android 10 及更高版本) 1、快速入门1.1 启动跟踪服务1.2 记录跟踪1.2.1 通过 Perfetto UI 记录跟踪1.2.2 通过 cmdline 记录跟踪1.2.3 System Tracing 的系统级应用抓取 2、perfetto 工具2.1 数据源选择2.2 语法参数2.2.1 轻量模式…

数据结构--树和二叉树

目录 1.树的结构及概念1.1树的概念1.2树的相关概念1.3树的表示1.4树在实际中的运用(表示文件系统的目录结构) 2.二叉树的相关概念2.1概念2.2现实版的二叉树2.3特殊的二叉树2.4二叉树的性质2.5二叉树的存储结构 3.与二叉树有关的习题总结 1.树的结构及概念…

RabbitMQ系列(14)--Topics交换机的简介与实现

1、Topics交换机的介绍 Topics交换机能让消息只发送往绑定了指定routingkey的队列中去,不同于Direct交换机的是,Topics能把一个消息往多个不同的队列发送;Topics交换机的routingkey不能随意写,必须是一个单词列表,并以…

leetcode极速复习版-第三章哈希表

目录 哈希表 哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和 哈希表 哈希表理论基础 那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出…

机器人制作开源方案 | 卧式车床模型概述

1. 功能说明 本文示例将通过程序控制模拟车床的运动效果--模拟车床进行加工时各个结构的运动方式。车床的主要运动包括夹持工件主轴的旋转运动、刀具进给运动、刀具的换刀旋转运动、溜板的平动、尾座上顶针的进给运动。 2. 结构说明 该车床主轴旋转运动选择带传动的传动方式&am…

Elasticsearch实战(二十四)---ES数据建模一对多模型Nested结构

Elasticsearch实战—ES数据建模一对多模型Nested结构 文章目录 Elasticsearch实战---ES数据建模一对多模型Nested结构1.ES 一对多模型Nested 结构模型实战2.ES字段查询2.1 非Nested 错误结构及错误查询2.2 Nested结构,正确查询 3.Nested结构原理 我们如何把Mysql的模…

vue 中使用 vxe-table 制作可编辑表格

项目上有一个表格需要实现在线编辑,开始用了 element 的el-table 实现,单元格内基础情况就是监听了单击单元格切换一个span标签与input标签,复杂点的单元格使用了大量的条件判断来实现对应的编辑操作,比如下拉选,popov…

github Couldn‘t connect to server

Couldnt connect to server 问题描述解决git clone 出错直接访问github没啥问题ping github.com手动指定域名映射关系再次测试git命令 总结参考 问题描述 前一天还是好好的,能git pull和git push,昨天回来之后怎么操作都是Couldnt connect to server。百…

【数据结构】堆的实现(向下调整和向上调整法)和堆排序的实现

目录 一、堆的概念引入 二、小堆的实现 首先,我们会跟线性表一样建立一个动态数组来存堆的数据 ①、堆的初始化--HeapInit ②、小堆的向下调整法的实现 ③、堆排序的实现 ④、堆的插入和向上调整法 ⑤、删除堆顶数据 ⑥、获取堆顶 三、时间复杂度总结&#…

C# PaddleInference OCR识别 学习研究Demo

说明 基于开源项目 https://github.com/sdcb/PaddleSharp VS2022.net4.8 OpenCvSharp4Sdcb.PaddleInference 效果 项目 代码 using Sdcb.PaddleInference.Native; using Sdcb.PaddleInference; using System; using System.Collections.Generic; using OpenCvSharp.Extensi…

15年前的手机并没有jvm虚拟机,为何可以运行Java游戏

2000年代初期,随着移动通信技术的发展,手机逐渐普及。那个时代的手机功能相对比较单一,主要用于打电话和发送短信。但是,随着技术的进步,人们开始在手机上玩游戏,而其中最受欢迎的游戏就是Java游戏。在那个…

ChatLaw,开源了!

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 最近这段时间,AI 的整体热度有所下降,但是 AI 技术在各行各业的探索脚步,却一直没有停止。 在 ChatGPT 刚发布时,有不少业内人士认为&#x…

【浏览器篇】记录下浏览器保存PDF文件不同方式的小区别

【浏览器篇】记录下浏览器保存PDF文件不同方式的小区别 以前不太注意这些,最近搞文档比较多才发现为何保存的一部分PDF文件里面字体可以复制可以搜索,一部分保存的PDF里面的字体却无法复制、无法搜索等,发现是不同保存方式得到的文档权限不一…

SQL注入攻击原理 实战

我来进行实战了,总在看教程。 文章目录 前言一,网站是否存在sql漏洞二、判断一下字段3. 判断显点4.查找相关信息1.查询数据库2.版本3.数据库表名4.字段名5,查询 总结 前言 提示:这里可以添加本文要记录的大概内容: 前言&#xff…

华为OD机试真题 Python 实现【学校的位置】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、Python算法源码五、效果展示1、输入2、输出3、说明 一、题目描述 为了解决新学期学生暴涨的问题,小乐村要建所新学校。考虑到学生上学安全问题,需要所有学生家到学校距离最短。假设学校和所有的学生家&am…

unity+pico neo3入门教程1-基础传送

tips:之前入门教程如果没有左手柄,查看一下自己的手柄设置,左右手柄, Helloworld型 1.基础传送,调式地面传送功能,通过手柄默认的“握手键”,瞬移, VR头显,添加Teleport…

Go语言远程调试

Go语言远程调试 1、安装dlv # 安装dlv $ go install github.com/go-delve/delve/cmd/dlvlatest$ dlv version Delve Debugger Version: 1.20.1 Build: $Id: 96e65b6c615845d42e0e31d903f6475b0e4ece6e $2、命令行远程调试 我们远程(Linux服务器)有如下代码: [ro…

(四)Kafka 消费者

文章目录 1. Kafka 消费者相关概念消费者和消费者组(1)横向伸缩消费者(2)横向伸缩消费者组 分区再平衡再均衡的类型(1)主动再均衡(2)协作再均衡(增量再均衡) …