确定一棵二叉树的方法可以使用扩展二叉树来构建以可二叉树,也可以通过由前序序列和中序序列或者由前序序列和后序序列来确定一棵二叉树。

例如由前序序列和中序序列来确定一棵二叉树,这里用到的方法是利用递归算法来处理。

例如已知前序序列:1 2 5 3 4      中序序列:5 2 3 1 4

处理过程:首先根据前序序列可以确定整棵二叉树的根结点是1,然后在中序序列中找到1这个结点,在中序序列中1作为分界点

,确定了1这个节点的左右子树分别的区域。在1左边的这些结点中为5 2 3,在前序序列里1的下一个结点是2,和5,2,3比较,重复上面的过程,就是确定2又是一个新的子树的根,然后确立左子树右子树。这样做到最后,是叶子结点的时候就意味着这棵树构建完成。

在构建过程中最麻烦的就是找子树的长度。

原题目

描述

输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。

输入

输入文件为tree.in,共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。

输出

输出文件为tree.out,仅一行,表示树的后序遍历序列。

样例输入

abdec
dbeac

样例输出

debca

代码:

#include <iostream>#include <cstring>#define MAX 50+3using namespace std;typedef char Elem_Type;typedef struct BiTree{Elem_Type data;//数据struct BiTree *Lchild;//左孩子struct BiTree *Rchild;//右孩子}BiTree;      //要查找的元素  查找的地方    数组的长度int Search_Num(Elem_Type num,Elem_Type *array,int len){for(int i=0; i<len; i++)if(array[i] == num)return i;//return -1;//没有找到}                     //前序遍历         中序遍历   中序数组长度BiTree *Resume_BiTree(Elem_Type *front,Elem_Type *center,int len){if(len <= 0)return NULL;BiTree *temp = new BiTree;temp->data = *front;int index = Search_Num(*front,center,len);temp->Lchild = Resume_BiTree(front+1,center,index);temp->Rchild = Resume_BiTree(front+index+1,center+index+1,len-index-1);return temp;}void PostOrderTraverse(BiTree *root)//后序遍历{if( root != NULL){PostOrderTraverse(root->Lchild);PostOrderTraverse(root->Rchild);cout<<root->data;}}int main(){Elem_Type *preorder = new Elem_Type [MAX];//前序Elem_Type *inorder  = new Elem_Type [MAX];//中序cin>>preorder;cin>>inorder;BiTree *root = Resume_BiTree(preorder,inorder,strlen(inorder));PostOrderTraverse(root);cout<<endl;return 0;}

树与二叉树——由前序序列和中序序列确定一刻二叉树相关推荐

  1. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

  2. 二叉树的建立(已知前序序列和中序序列)

    已知二叉树前序序列和中序序列递归创建二叉树 #include<bits/stdc++.h> using namespace std; typedef struct Node{char da ...

  3. 由前序序列与中序序列实现后序遍历

    二叉树是一种特殊的树,二叉树只有两个分支,分别是该节点的左儿子和右儿子. 前序遍历:就是先遍历根节点,然后再访问左子树与右子树.遍历子树的时候同样也是先遍历根节点然后在遍历他的左子树与右子树. 中序遍 ...

  4. 二叉树的前序遍历,中序遍历,后序遍历-详解-配套例题

    二叉树作为数据结构中一种简单而且重要的数据结构,他的存储结构和算法都相对比较简单,因此他也显得特别重要,因为很多问题都可以抽象为二叉树的问题. 在这里我们对于二叉树的基本概念不做详细介绍,我们这里主要 ...

  5. 根据二叉树的前序遍历和中序遍历重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  6. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)

    7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...

  7. 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序{ ...

  8. 先序序列和中序序列构造二叉树,中序序列和后序序列构造二叉树

    1:首先读者要了解二叉树BinaryTree基本概念,其次区分左子树与左孩子节点,右子树与右孩子节点.(在数据结构中      一个节点可以成为一棵树,对于没有孩子节点的节点称为为叶子节点). 2:在 ...

  9. 已知二叉树先序序列和中序序列,求后序序列

    回答了百度知道上的一个提问,原题是这样的: 当一棵二叉树前序序列和中序序列分别为HGEDBFCA和EGBDHFAC时,其后序序列为什么?当一棵二叉树前序序列和中序序列分别为HGEDBFCA和EGBDH ...

最新文章

  1. chrome动态ip python_简单python代码实现模拟浏览器操作
  2. Elasticsearch5.x 升级-插件
  3. eclipse目录出现重复情况 解决
  4. poj2624 4th Point
  5. IPHONE 开发 7 -- Object C 02 字符串NSString 与 char* ,字符串的遍历,字符串的比较,截取与大小写改变,搜索字符串与替换字符串...
  6. mongoose $sum
  7. ThriftParserError: ThriftPy does not support generating module with path in protocol 'd'
  8. 调节e18-d80nk的测量距离_地坪研磨机磨盘平整度的调节方法及好处
  9. php 屏蔽ctrl c,ctrl+c用不了怎么回事
  10. java怎么反编译_java如何进行反编译
  11. 微信下载录音文件(音轨分离 ffmpeg视频合成)
  12. 22二叉树非递归遍历算法
  13. 计算机屏幕背景设置方法,高清电脑桌面壁纸如何设置,教您设置系统主题美化方法...
  14. 计算机的垃圾站是在硬盘,电脑垃圾回收站在哪里
  15. 2020 CCPC - 网络选拔赛 签到计划
  16. 少年歌行、少年白马、暗河传综合实力排行
  17. 自创文字小游戏《人类末日·丧尸危机》
  18. Error in nextTick TypeError Cannot read property 'children' of undefined 解决
  19. 关于The C10K problem的一些资料
  20. 微信分享自定义多次分享设置

热门文章

  1. 第七周作业--任务分解
  2. oracle 11g dul,dul 10支持oracle 11g r2
  3. 英语关于计算机游戏作文,沉迷网络游戏的英语作文(精选5篇)
  4. 基于SpringBoot的简历管理系统
  5. 中序和后序(前序和中序)序列确定一颗二叉树
  6. 国外访问学者申请政策解析
  7. 一、初识FreeRTOS之FreeRTOS简介
  8. bellman_ford算法 由边数限制的最短路
  9. 【Power Automate】日期格式化函数formatDateTime详细说明及示例
  10. 淘宝关键字搜索商品-v1