二叉树已知前序遍历、中序遍历画出二叉树的形状
前序遍历:
前序遍历(VLR)是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。
若二叉树为空则结束返回,否则:
(1)访问根结点。
(2)前序遍历左子树。
(3)前序遍历右子树 。
需要注意的是:遍历左右子树时仍然采用前序遍历方法。
已知后序遍历和中序遍历,就能确定前序遍历。
中序遍历:
中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
若二叉树为空则结束返回,否则:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
已知前序遍历和后序遍历,无法推导出二叉树,所以无法确定中序遍历。
后序遍历:
后序遍历(LRD)首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。
若二叉树为空则结束返回,否则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根结点
已知前序遍历和中序遍历,就能确定后序遍历。
根据前序遍历中序遍历推导树的结构:
已知:
前序遍历: GDAFEMHZ
中序遍历: ADEFGHMZ
求后序遍历
1.根据后序遍历的特点(左右中),根节点在结尾,确定G是根节点。根据中序遍历的特点(左中右),确定ADEF组成左子树,HMZ组成右子树。
2.分析左子树。ADEF这四个元素在后序遍历(左右中)中的顺序是AEFD,在中序遍历(左中右)中的顺序是ADEF。根据后序遍历(左右中)的特点确定D是左子树的节点,根据中序遍历(左中右)的特点发现A在D前面,所以A是左子树的左叶子,EF则是左子树的右分枝。
EF在后序(左右中)和中序(左中右)的相对位置是一样的,所以EF关系是左右或者左中,排除左右关系(缺乏节点),所以EF关系是左中,
到此得出左子树的形状。
3.分析右子树。HMZ这三个元素在中序遍历(左中右)的顺序是HMZ,在后序遍历(左右中)的顺序是HZM。根据后序遍历(左右中)的特点,M在尾部,即M是右子树的节点。再根据中序遍历(左中右)的特点,确定H(M的前面)是右子树的左叶子,Z(M的后面)是右子树的右叶子。
4.最后得出树的形状。
最后还可以得出这个二叉树的后序遍历为AEFDHZMG。
二叉树已知前序遍历、中序遍历画出二叉树的形状相关推荐
- [算法] 已知前序和中序遍历,建立二叉树
结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和中序遍历顺序,建立二叉树 问题 ...
- [算法] 已知前序和后序遍历,建立二叉树
结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...
- 二叉树中已知前序和中序求其后序(图解加技巧让你轻松掌握)
一 首先咱得了解二叉树的结构,和前序/中序/后序遍历分别是什么. 1:什么是根和左右孩子:二叉树的每个节点都可以作为根,每个根下面的叫左右孩子,也可以没有孩子 实际使用中会如下图 ...
- 【必拿下系列】106. 从中序与后序遍历序列构造二叉树105从前序与中序遍历序列构造二叉树
两题各自的链接放这里了: 链接: 106 链接: 105 106.从中序与后序遍历序列构造二叉树 如果你是不知道理论的,那就得仔细分析了, 举个例子: 输入:inorder = [9,3,15,20, ...
- leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析
目录 1.106题目 2.参考思路:递归切割数组 3.105题目 4.同样思路的代码 1.106题目 2.参考思路:递归切割数组 代码参考:公众号:代码随想录 后序数组+中序数组 以 后序数组(左右中 ...
- 剑指offer 07重建二叉树(根据前序、中序遍历)草真tm难
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode ...
- 二叉树 中序遍历 python_leetcode No.105 从前序与中序遍历序列构造二叉树
题目链接: 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)leetcode-cn.com 题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树,可以假设树中没有重复的元素. 示例: 前 ...
- 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)
1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...
- Java——从前序与中序遍历序列构造二叉树
文章目录 前言 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 1.构造二叉树 2.层次遍历二叉树 三.总结 前言 算法分析--分治法 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 ...
最新文章
- MATLAB——scatter的简单应用
- [USACO07JAN]Protecting the Flowers S
- 如何计算机械能,问:损失的机械能如何计算?
- myeclipse怎么集成Tomcat
- CodeForces - 594A Warrior and Archer(思维+博弈)
- LeetCode 1796. 字符串中第二大的数字
- vba显示正在加载_简单、易用的VBA过程积木代码
- 【今日CS 视觉论文速览】 24 Dec 2018
- JQuery UI AutoComplete 与 Strtus2 结合使用
- [C#]自定义鼠标样式
- 95-235-050-源码-task-Flink task之间的数据交换
- Java实现MongoDB的日期(Date)分组功能
- React全家桶构建一款Web音乐App实战(五):歌曲状态管理及播放功能实现
- Zookeeper全解析——Client端(转)
- IDEA jsp页面代码没有高亮
- “我爱淘”冲刺阶段Scrum站立会议9
- “竞速”智能网联汽车,领头雁为何是长沙?
- 十大网页设计者必看的网站
- NYOJ283对称排序
- 谷歌浏览器上传文件时候出现卡死现象
热门文章
- 全志A10/A20 nand flash系统开发
- 计算机的一些小操作,电脑操作实用小技巧(适用小白)
- dos2unix install on mac_好用到叫出声!强烈推荐 10 款 Mac 软件!
- 华为Mate book D 2018加装内存条
- win7怎么进网络连接服务器未响应,win7 怎么远程连接服务器未响应
- (sdau) Summary of the fourth week.
- 【CF1616H】Keep XOR Low(字典树)
- SpringBoot整合Redis配置MyBatis二级缓存
- C# 上位机倒数计时器
- 时间机器 Time Machine 三星T7 移动硬盘SSD解决方案