11.2树的高度,表达式树,非递归遍历,层序遍历,奇偶树

课上

前序,根左右

中序,左根右

若前序中序相同,则树都没有左节点

求树的高度

表达式树

中缀表达式树

主要考虑括号问题

这个就是考虑递归底层,要结束时的情形;以及根节点的情形;

由于表达式树是满树,不会出现度为1的结点,所以要么是叶子结点,即递归的终点;

要么是有两个孩子的父节点,递归输出左右子树

非递归实现前序遍历

非递归,就是用栈结构模拟,先进后出

每次循环都干了两件事,第一件事是先沿左分支一直往下走,直到走不下去,并且把沿途的结点都记录到栈中;第二件事就是左不下去了,然后重新赋值为最后一个左节点,并且把其从栈里取出来,然后尝试得到它的右节点,得到右结点后,不在本层迭代中用,而是在下次迭代中用。

第一件事的终止条件说的是该结点为空,即遍历到的为叶子结点,它结束的时候,指针结点一定是空结点,即一定访问到了最底层,所以第二件事的if里,第一步就是重新把栈的顶部元素赋值给结点,但是一定不要让栈里元素再次回到循环里,否则就会形成死循环,所以无论有没有右孩子,都要把那个栈顶结点的右孩子赋值给树结点,如果有右孩子,那么就是接着先序遍历其右孩子,如果没有,在下次循环里就不会继续进行,而是得到下一个栈顶元素,即开始往回遍历找右孩子了

后续的非递归

第二种思想就是根据非递归的前序得到非递归的后序

前序:根左右  后续:左右根

后序的反转为,根右转左转。

右转就是说它右子树里面也都反转了,就是递归进行反转,向下多层都进行了反转,而不是只在最外层进行了一次反转。

所以用非递归前序就是非递归进行前序遍历时,先遍历右子树,再遍历左子树,就是位置交换了一下,这样就得到了后序的反转序列,再反转一次,就得到了通过非递归前序实现的非递归后序序列

层序遍历树

检验奇偶树

1.层序

就是建立两个队列,两个队列中的元素一一对应,其实可以用一个结构体(即树结点与其深度组成)队列

2.深度

用且的关系,即左右必须都得是奇偶树才行

额外要求

1.层序

2.dfs

层序遍历对每一层的结点是从左到右,深度优先也是从左到右,不过不一定连续,层序遍历一定连续。

由于不连续,所以就用一个数组来记录上一个访问到的该层数的结点的值,类似于数组计数思想

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

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

相关文章

maven子模块无法导入jar包问题

明明本地仓库有jar包 maven子模块无法导入jar包,然后放到父项目的pom.xml则可以导入 可以试试更新仓库后,引入成功

什么是消息队列

什么是消息队列 消息队列是一种通信机制,用于在不同的应用程序或组件之间传递消息。它允许应用程序之间异步地发送和接收消息,而无需直接依赖彼此的可用性或性能。消息队列通常用于解耦不同组件,提高系统的可伸缩性和可维护性,以…

day01_Java概述丶环境搭建

前置知识 什么是计算机语言? 计算机语言就是人与计算机之间进行信息交流沟通的一种特殊语言。所谓计算机编程语言,就是人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。 Java语言概述 是美国Sun公司(Stanf…

部署WeBASE

1、检查环境 1.1、检查Java java -version 1.2、检查mysql mysql --version 1.3、检查Python python --version # python3时 python3 --version 2、修改配置 修改common.properties 修改webase-node-mgr 修改webase-node-mgr/conf/application.yml 修改webase-node-mgr…

html用css grid实现自适应四宫格放视频

想同时播放四个本地视频: 四宫格;自式应,即放缩浏览器时,四宫格也跟着放缩;尽量填满页面(F11 浏览器全屏时可以填满整个屏幕)。 在 html 中放视频用 video 标签,参考 [1]&#xff1…

windows内存取证-中等难度-下篇

上文我们对第一台Target机器进行内存取证,今天我们继续往下学习,内存镜像请从上篇获取,这里不再进行赘述​ Gideon 攻击者访问了“Gideon”,他们向AllSafeCyberSec域控制器窃取文件,他们使用的密码是什么? 攻击者执…

大数据与健康:技术助力医疗卫生事业腾飞

大数据与健康:技术助力医疗卫生事业腾飞 随着科技的飞速发展,大数据技术已经渗透到我们生活的方方面面,包括医疗卫生领域。本文将对大数据在健康医疗领域的应用进行分析,并通过数据图表展示其发展趋势和前景。 一、背景介绍 近…

5大自动化测试的Python框架 【实用干货】

自从2018年被评选为编程语言以来,Python在各大排行榜上一直都是名列前茅。 目前,它在Tiobe指数中排名第三个,仅次于Java和C。随着该编程语言的广泛使用,基于Python的自动化测试框架也应运而生,且不断发展与丰富。 因…

eclipse Occurrence

eclipse Occurrence Occurrence of initUi2_setData_99 Window->Preferences->General->Editors->Text Editors->Annotations->Occurrences 个人感觉最好用的颜色; 边线,正文都可以看得清楚

数据结构和算法的精髓是什么?复杂度分析【数据结构与算法】

为什么需要复杂度分析?什么是 O 复杂度表示法?如何分析时间复杂度?常见时间复杂度量级有哪些?O(1)O(logn)O(nlogn)O(mn)、O(m*n) 数据结构和算法解决的是执更快和更省资源的问题,快和省通过复杂度来衡量。 为什么需要复…

整理笔记——0欧电阻、电感、磁珠

设计电路时,经常用到0欧电阻、电感、磁珠,这三个基础电子原件万用表量都是“短路”,这三者之间有什么区别?什么情况下用什么原件? 一、0欧电阻 0欧电阻,并不是指元件的电阻值为0,而是电阻值很小…

C++:string类!

Cstring 是C中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。 不像传统的c-strings,只是在数组中的一个字符序列,我们称之为字符数组,而C字符串对象属于一个类,这个类有很多内置的特点,在操作…

如何在麒麟上安装 ONLYOFFICE 桌面编辑器

我们很高兴地告诉大家,ONLYOFFICE 桌面编辑器现已上架麒麟软件商店。请阅读下文了解详情。 关于麒麟 麒麟是一款国产操作系统,主要是为了满足中国市场的需求和偏好而设计的。 它能够与各种硬件平台和软件应用程序的广泛兼容,因而受到认可。…

1360. 日期之间隔几天

1360. 日期之间隔几天 Java代码: 【DateFormat】DateFormat用于实现日期的格式化 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; // 好像已过时class Solution {public int daysBet…

【Java】多线程案例(单例模式,阻塞队列,定时器,线程池)

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 实现安全版本的单例模式饿汉模式类和对象的概念类对象类的静态成员与实例成员 懒汉模式如何保证…

计算机算法分析与设计(22)---回溯法(最小重量机器设计问题)

文章目录 一、问题描述二、算法思路三、代码编写 一、问题描述 设某一机器由 n n n 个部件组成,每种部件都可以从 m m m 个不同的供应商处购得。设 w i j w_{ij} wij​ 是从供应商 j j j 处购得的部件i的重置, c i j c_{ij} cij​ 是相应的价格。设计…

软件开发全文档归档,开发、管理、实施、运维、服务巡检、信息安全、安全运维

在当今高度信息化的时代,软件开发已成为推动社会进步和发展的重要力量。软件开发过程中,文件支撑作为关键的一环,对于保障项目的顺利进行和产品的质量具有不可替代的作用。本文将探讨软件开发所需的主要文件及其作用。 一、引言 软件开发是…

leetCode 746. 使用最小花费爬楼梯 + 记忆化搜索 + 递推 + 动态规划 + 空间优化

关于此题我的往期文章: leetCode 746. 使用最小花费爬楼梯 动态规划-CSDN博客https://heheda.blog.csdn.net/article/details/133325840 dfs(i-1) 跳到 dfs(i) 需要花费 dfs(i-1) cost[i-1]dfs(i-2) 跳到 dfs(i) 需要花费 dfs(i-2) cost[i-2] (1&…

C++——list

目录 list介绍 list的函数接口 构造函数 push_front和pop_front push_back和pop_back insert erase 迭代器 front和back size resize empty clear list::sort unique reverse 迭代器的实现 list介绍 list是一种可以在常数范围内在任意位置进行插入和删除的序列…

Java实现Web的ashx对接ORM

之前的介绍已经实现了ORM的主体和Web的调用结构主题,那么这次把Web和LIS.Core的容器和ORM做对接,通过ashx实现的业务类测试调用ORM查询数据。 首先改造容器让传入根地址 package LIS.Core.Context;import org.w3c.dom.Document; import org.w3c.dom.El…