二叉树 ---- 前序 中序 后序 知二求一
二叉树 ---- 前序 中序 后序 知二求一
先说一下什么是二叉树的前中后序;
根:根节点 左代表遍历左子树 右代表遍历右子树
前序:根—左---右
中序:左—根---右
后序:左—右---根
如图求前序:
//叶子结点简单的说就是没有儿子的节点;
先遍历到a节点,再遍历它的左子树;
遍历到b节点,再遍历它的左子树;
遍历到c节点,发现c节点为叶子结点,返回到它的根节点b; 遍历b节点的右子树;
遍历到d节点,发现d节点为叶子结点,返回到节点a;遍历a节点的右子树;
遍历到e节点,再遍历它的左子树;发现它没有左子树,遍历它的右子树;
遍历到f节点,发现f节点为叶子结点,遍历结束;
中序后序自己动手推一下
前序: a b c d e f
中序: c b d a e f’
后序: c d b f e a
还有前序和后序推出来的中序不唯一;
这里还有一些练习
知道前序中序求后序
答案:
#include<bits/stdc++.h>
using namespace std;
string z;//中序
string q;//前序
void dfs(int l1,int r1,int l2,int r2) {//l1 r1 为中序,l2 r2 为前序if(l1 > r1 || l2 > r2) return ;for(int i = l1;i <= r1;i++) {if(z[i] == q[l2]) {dfs(l1,i - 1,l2 + 1,l2 + i - l1);//遍历左子树,i - l1 是左子树的节点数dfs(i + 1,r1,l2 + i - l1 + 1,r2);//遍历右子树cout << q[l2];//因为是左右根的顺序 最后输出的就是根节点}}
}
int main() {cin >> z;cin >> q;int len = q.size() - 1;dfs(0,len,0,len);return 0;
}
知道中序后序求前序
#include<bits/stdc++.h>
using namespace std;
string z;
string h;
void dfs(int l1,int r1,int l2,int r2) {if(l1 > r1 || l2 > r2) return ;for(int i = l1;i <= r1;i++) {if(z[i] == h[r2]) {cout << h[r2];dfs(l1,i - 1,l2,l2 + i - l1 - 1);dfs(i + 1,r1,l2 + i - l1,r2 - 1);}}
}
int main() {cin >> z;cin >> h;int len = h.size() - 1;dfs(0,len,0,len);return 0;
}
二叉树 ---- 前序 中序 后序 知二求一相关推荐
- 二叉树前序遍历,后序遍历
求前序遍历 Description 给出一棵二叉树的中序和后序遍历,求它的前序遍历.(树结点用不同的大写字母表示,长度小于等于26.) Input 本问题有多组测试数据,每组测试数据有两行,每行都是由 ...
- 二叉树前序遍历与后序遍历
二叉树 前序遍历 递归 借助栈进行排序 先将根节点压栈 栈不为空,如果存在根节点,先右后左. 弹栈打印.直至栈为空 package com.vitamin.tree;import java.util. ...
- 二叉树前序中序后序及其推理
二叉书的前中后序遍历顺序. 以下面这个图为例: 前序遍历为:1 2 4 7 3 5 6 8 后序遍历为:7 4 2 5 8 6 3 1 中序遍历为:4 7 2 1 5 3 8 6 规则很简单就是:前序 ...
- 用前序中序创建二叉树(用中序后序创建二叉树)
定义二叉树结点 比如就拿这个二叉树 前序中序创建 因为前序遍历的顺序是 根 , 左 ,右. 中序的遍历是 左 根 右. 我们会很不好想,但我们可以用前序和中序把上面那个二叉树的遍历一边 前序遍历:AB ...
- 二叉树前序中序,后序中序,公共最近祖先的实现
二叉树前序中序,后序中序,公共最近祖先的实现 注释中详细介绍了算法,故不再赘述. 无论是前序还是后序,一个节点的左子树和右子树都是可以看做是分开的,有一定规律可循,故可用递归进行实现. #includ ...
- 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++
a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...
- 前序中序、中序后序以及前序后序构造二叉树
文章目录 前序中序 中序后序 前序后序 定义的树节点如下, class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { ...
- 序列化和反序列化二叉树 -----前序,中序,后序,层序
目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...
- 二叉树的前序中序后序遍历
二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...
最新文章
- ine.strip().split()
- 王道计算机考研 数据结构 (查找-下)
- python编写程序判断今天是今年的第几天_C语言判断今天是今年的第几天
- ClickHouse之简单性能测试
- go 函数名之前括号中的内容_2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数
- android 进程管理机制,Android的进程管理机制
- 基于单片机的自动加热水壶控制器代码_应用于实时温度控制的单片机设计
- RabbitMQ-理解消息通信-虚拟主机和隔离
- matlab深度DoF图像修复,恢复玩dnf在win10中出错client.exe损坏的图像的技巧
- 反思 | 事件总线的局限性,组件化开发流程中通信机制的设计与实现
- 信号处理基础——傅里叶变换与短时傅里叶变换
- android4.2.2飞歌导航,智能车机新典范 飞歌G6S荣耀版导航鉴赏
- 【Python网络爬虫实战篇】关于在青果教务网络管理系统爬取学生成绩的分析及代码展示——以郑州轻工业大学(zzuli)教务网络管理系统为例
- pnuts系统的局限性_水平系统的局限性
- 微信小程序自动定位当前位置
- 计算机密码学题目,计算机密码学习题
- TypeError: this.getOptions is not a function at Object.lessLoader less安装使用报错
- 二手交易APP开发主要功能有哪些?(一)
- 移动硬盘插入提示需要格式化RAW_为什么U盘插电脑上提示需要格式化?想让资料不丢失,这样就可以...
- 天下没有不会这么回事!不会就学——北漂18年(28)
热门文章
- 11.RT-thread项目实战--usb_device 模拟读卡器
- 百度云sugar大屏模板2
- 为什么要用三维数据可视化?
- 企业的好坏,跟员工无关
- 按照图片名称移动到文件夹中保存
- Python发送微信消息(文字、图片、文件)给指定好友和微信群(调用Win32 API模拟人的手动操作来发送消息)
- 基于SSM的电影院订票系统(Spring+SpringMVC+Mybatis)简洁版
- 解决msvcp100.dll文件丢失问题
- Qt Charts 画平行四边形
- python response重头开始_用 Python 修改支付宝运动步数,轻松 TOP1