30秒解出已知先/后序遍历与中序遍历求出后/先序遍历

2023-10-13 18:30

本文主要是介绍30秒解出已知先/后序遍历与中序遍历求出后/先序遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看完下面这个方法会让你心生四字
卧槽,牛逼!!!

  画不多说,直奔主题,在昨天晚上室友做题时做到这种已知先/后序与中序遍历,让你求出后/先序遍历,最开始我采用的仍然是老办法,根据先序或者后序的结果确定根节点,在看中序结果,根据根节点在中序的位置,求出左右子树,然后递归求解剩下的节点,画出二叉树。

  那么既然说到30秒写出答案,上面这种方法直接丢掉,接下来就是见证奇迹的时刻。
拿题说话:
第一种情况:已知先序中序求后序:

 
我们只需画一个矩阵:

纵轴从上到下写出先序遍历结果,横轴从左往右写出中序遍历结果,然后把纵轴和横轴对应的字母写出来,谁在最上面谁就是双亲节点,在该字母左边的就是该字母的左子树,右边就是右子树。就比如上面这道题。

矩阵图如下:

  按照上述方法写出先序遍历结果以及中序遍历结果后,s对s,t对t,u对u,w对w,v对v,在矩阵中写出来,然后先后连接,二叉树就完美的画出来了,自然而然后序的结果就是:wuvts。写到这里是不是感觉这个方法异常的流批。

那么有人就会有疑问,为什么v要连接t而不是w呢,上面说到,在图中,处在节点左边的就是该节点的左子树,右边就是右子树,v在t的右边,那么就是t的右子树,所以t和v连接。
还有就是要注意u在w的上面,所以t先连接u,w在u的右下边就是u的右子树在连u。在做题的时候矩阵对应的字母先后顺序一定要画准确,最好用个带格格的纸。

第二种情况:已知中序后序求先序

        方法完全一样,只需把后序遍历的结果按照从后往前的顺序写出来。
      拿题说话:



矩阵图:

 和已知先序遍历唯一的不同就是纵轴的顺序,是按照后序遍历结果从后往前自上到下写下来。

总结:

方法简单粗暴,注意的点就是矩阵图画准确,明确在图中节点左边就是该节点左子树,右边就是右子树。以及注意图中节点上下位置,在该节点上方就是该节点的双亲节点,在下方就是孩子节点,同一行就是兄弟节点。

码字不易,记得点赞收藏哦!!!



 

这篇关于30秒解出已知先/后序遍历与中序遍历求出后/先序遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/205084

相关文章

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

c++习题30-求10000以内N的阶乘

目录 一,题目  二,思路 三,代码    一,题目  描述 求10000以内n的阶乘。 输入描述 只有一行输入,整数n(0≤n≤10000)。 输出描述 一行,即n!的值。 用例输入 1  4 用例输出 1  24   二,思路 n    n!           0    1 1    1*1=1 2    1*2=2 3    2*3=6 4

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」�

hashmap的存值,各种遍历方法

package com.jefflee;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class HashmapTest {// 遍历Hashmap的四种方法public static void main(String[] args) {//hashmap可以存一个null,把

Knight Moves -uva 简单的BFS遍历

昨天刚学了BFS的遍历,在uva上找了个题敲了出来,感觉还不错,最近敲代码挺有手感的,希望这种状态保持下去 #include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX_SIZE 10 + 5#define LEN 100 + 10using namespace std;in