二叉树前序,中序转后序
由二叉树的前序和中序如何得到二叉树的后序呢?要给出答案,首先得明白什么是前序、中序、后序。
二叉树前序:遍历顺序为,根节点、左子树、右子树;中序:遍历顺序为,左子树、根节点、右子树;后序:遍历顺序为,左子树、右子树、根节点
可以发现,二叉树前序中的第一个节点为树的根节点root,然后找出root在中序里面的位置,就可以把前序和中序分别划分为左、右子树两个部分,然后递归调用即可。
举个例子,前序 5 3 2 4 8 6 10 中序 2 3 4 5 6 8 10
首先,5肯定是二叉树的根节点,然后5在中序里面的位置是3号(从0开始),此位置前面的是左子树中的节点,右面的是右子树的节点,即5 || 3 2 4 || 8 2 6 , 2 3 4 || 5 || 6 8 10,对红色的左子树序列、蓝色的右子树序列继续上述过程,直至结束。
由后序和中序求前序也是像类似的思想。但是仅仅知道前序和后序无法确定二叉的形状。比如前序 1 2 3 后序 3 2 1 则下面两种情况都符合
附二叉树前序和中序生成后序的代码
1 //二叉树 前序和中序得到后序 2 #include <stdio.h> 3 typedef struct node 4 { 5 int key; 6 struct node *left; 7 struct node *right; 8 }treeNode; 9 10 int pre_order[100]; 11 int mid_order[100]; 12 13 treeNode* construct_post_order(int pre_l, int pre_r, int mid_l, int mid_r) 14 { 15 if (pre_r - pre_l < 0) 16 { 17 return NULL; 18 } 19 treeNode *root; 20 root = new treeNode; 21 root->key = pre_order[pre_l]; 22 if (pre_r == pre_l) 23 { 24 root->left = NULL; 25 root->right = NULL; 26 return root; 27 } 28 int index; 29 for (index = mid_l; index <= mid_r; index++) 30 { 31 if (mid_order[index] == pre_order[pre_l]) 32 break; 33 } 34 root->left = construct_post_order(pre_l+1, pre_l+(index-mid_l), mid_l, index-1); 35 root->right = construct_post_order(pre_l+(index-mid_l)+1, pre_r, index+1, mid_r); 36 return root; 37 } 38 39 void post_Order(treeNode *root) 40 { 41 if(root != NULL) 42 { 43 post_Order(root->left); 44 post_Order(root->right); 45 printf("%d ", root->key); 46 } 47 } 48 49 int main() 50 { 51 int n; 52 printf("输入序列的长度\n"); 53 scanf("%d", &n); 54 printf("输入二叉树前序\n"); 55 for (int i = 0; i < n; i++) 56 scanf("%d", &pre_order[i]); 57 printf("输入二叉树中序\n"); 58 for (int i = 0; i < n; i++) 59 scanf("%d", &mid_order[i]); 60 treeNode *root = construct_post_order(0, n-1, 0, n-1); 61 printf("二叉树的后序为\n"); 62 post_Order(root); 63 printf("\n"); 64 scanf("%d", &n); 65 66 return 0; 67 }
转载地址: http://www.cnblogs.com/rain-lei/p/3576796.html
二叉树前序,中序转后序相关推荐
- 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...
二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...
- 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)
手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...
- 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树
leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...
- 二叉树前序、中序、后序遍历求法
二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...
- PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...
http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...
- 二叉树的前序、中序、后序遍历与创建
#include <iostream> #include <string> #include <stack> using namespace std; struct ...
- leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析
目录 1.106题目 2.参考思路:递归切割数组 3.105题目 4.同样思路的代码 1.106题目 2.参考思路:递归切割数组 代码参考:公众号:代码随想录 后序数组+中序数组 以 后序数组(左右中 ...
- 数据结构 - 二叉树(前序中序后序查找)
public static int i = 1, j = 1, k =1;//编写前序查找方法public HeroNode preOrderSearch(int no){System.out.pri ...
最新文章
- WinForm窗体设置
- 中运用_胶水在木雕中的运用技巧
- HDU 2833 WuKong
- wxWidgets:wxScrolled 示例
- C++爬虫项目爬取图片
- java底层机制_Java同步机制的底层实现
- python csv合并单元格_python中合并表格的两种方法
- android 动画xml属性总结
- 论文笔记_S2D.09-2018-ECCV_从RGB和稀疏感知估计深度
- python 运算符及 字符串格式化输出方式 if条件语句判断 random函数简单应用练习
- 成功创业者培养的四个习惯
- LaTex 符号大全
- 太实用了,这几个Python数据可视化案例
- java实现识别二维码图片功能
- SpringBoot整合Minio实现文件上传、下载
- Basset: learning the regulatory code of the accessible genome with deep convolutional neural network
- java虚拟机内存查看相关命令
- 微型计算机联想扬天a6800,商务新选择 联想扬天A6800V评测
- SCI论文写作的学习与总结
- 机器学习之梯度提升决策树(GBDT)
热门文章
- node.js安装及环境配置超详细教程【Windows系统安装包方式】
- 华为设备配置私网IP路由FRR
- pychrm设置全局代理
- 致态TiPro7000固件Firmware更新+升级软件(英韧IG5236主控)
- mybatis plus学习总结
- 站台「亚马逊云科技中国峰会」,我成了「开发者大讲堂」演讲嘉宾~
- RuntimeError: populate() isn‘t reentrant
- 2021年安全员-C证模拟考试系统及安全员-C证操作证考试
- 基于微信小程序的移动学习平台的设计与实现_kaic
- PTA 7-30 求矩形面积