由二叉树的前序和中序如何得到二叉树的后序呢?要给出答案,首先得明白什么是前序、中序、后序。

二叉树前序:遍历顺序为,根节点、左子树、右子树;中序:遍历顺序为,左子树、根节点、右子树;后序:遍历顺序为,左子树、右子树、根节点

可以发现,二叉树前序中的第一个节点为树的根节点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 node4 {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 }

二叉树——前序和中序得到后序相关推荐

  1. 中序和后序(前序和中序)序列确定一颗二叉树

    概述 中序遍历的结果和后序遍历的结果可以确定一颗二叉树 或者前序遍历和中序遍历 但是前序后和后序无法确定一颗二叉树 由先序序列和后序序列不能唯一确定一棵二叉树,因无法确定左右子树两部分. 例如 俩二叉 ...

  2. 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

    二叉树的遍历(前序.中序.后序.已知前中序求后序.已知中后序求前序)   之前的一篇随笔(二叉树.前序遍历.中序遍历.后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前.中.后序的遍历顺序进 ...

  3. 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...

    二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...

  4. 二十五、二叉树的前序、中序、后序遍历

    一.为何使用树这种数据结构 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较 ...

  5. 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)

    手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...

  6. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  7. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  8. 二叉树前序、中序、后序遍历求法

    二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...

  9. PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...

    http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...

  10. 二叉树的前序、中序、后序遍历与创建

    #include <iostream> #include <string> #include <stack> using namespace std; struct ...

最新文章

  1. Linux基础命令---文本显示more
  2. boost::hana::is_subset用法的测试程序
  3. 科技领袖技术大亨们被指是现代强盗:不仅赚钱还想垄断
  4. kaggle为什么总是难以拿到金牌
  5. 直方图均衡 视觉显著_视觉图像:对比度受限直方图均衡化CLAHE
  6. 超全超详细的HTTP状态码大全
  7. Java 实现固定长度队列,自动删除最早添加的数据
  8. Python:random库使用方法
  9. 开课吧:Web前端开发三大框架的特点
  10. keepalived漂移VIP故障
  11. Windows Phone 7 Jump Start 系列教程
  12. WARCannon:高速低功耗网络爬虫
  13. 用100多行python代码开发java代码生成器
  14. 2022年全国职业院校技能大赛网络安全赛卷(中职组)卷1
  15. 如何对研发团队绩效进行考核--附各环节人员考核参考表
  16. 2022京东3.8节如何给不同SKU打水印?
  17. HTML5 全局属性
  18. Express响应方法
  19. 最新总裁导航系统PHP网站源码+开源版
  20. [论文解读]微信看一看实时Look-alike推荐算法

热门文章

  1. 【mmdetection3d】——3D 目标检测 NuScenes 数据集
  2. 如何修改非root用户的ulimit -n的值
  3. 统一身份认证(SSO/AD域/LDAP)
  4. Leetcode_154_Find Minimum in Rotated Sorted Array
  5. EntityConnection ConnectionString
  6. 问题“ConnectionString属性尚未初始化”之解决办法
  7. 【awk】awk 常用命令
  8. 100天精通Oracle-实战系列(第16天)使用 RMAN 备份快速恢复误删数据表
  9. cas ucenter 集成
  10. 直方图的计算,绘制与分析