//1,先中后
#include<iostream>
using namespace std;
typedef struct BiTNode{struct BiTNode *lchild;struct BiTNode *rchild;int data;
}BiTNode, *BiTree;BiTree creatTree(int *in, int *pre, int n){if(n <= 0)return NULL;else{BiTree T = new BiTNode;T->data = pre[0];int i;for(i = 0; i < n; i++){if(pre[0] == in[i])break;}T->lchild = creatTree(in, pre + 1, i);T->rchild = creatTree(in + i + 1, pre + i + 1, n - i - 1);return T;}
}
void postorderTraversal(BiTree BT){if(BT){postorderTraversal(BT->lchild);postorderTraversal(BT->rchild);cout << " " << BT->data;}
}
int main(){int n; cin >> n;int in[32];int pre[32];BiTree T;for(int i = 0; i < n; i++){cin >> pre[i];} for(int i = 0; i < n; i++){cin >> in[i];}T = creatTree(in, pre, n);cout << "Postorder:";postorderTraversal(T);return 0;
}
//2
#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
#include<algorithm>
#include<vector>
#include<cstring>
#include<sstream>
#include<cmath>
using namespace std;
const int maxn = 100000;
char pre[maxn];     /**先序遍历后对应的串*/
char ino[maxn];     /**中序遍历后对应的串*/
//char post[maxn];    /**后序遍历后对应的串*/
typedef struct BiNode
{char data;BiNode *Left;BiNode *Right;
}BiNode, *BiTree;BiTree build(char *pre, char *ino, int len)
{if(len <= 0)return NULL;BiTree T = new BiNode;T->data = *pre;char *root = pre;char *p = ino;while(p){//找到根节点在中序中对应的位置if(*p == *root)break;++p;}//左子树的长度int left_len = p - ino;T->Left = build(pre + 1, ino, left_len);T->Right = build(pre + 1 + left_len, p + 1, len - left_len - 1);return T;
}//后序遍历
void postOrder(BiTree T)
{if(T){postOrder(T->Left);postOrder(T->Right);printf(" %c", T->data);}
}int main()
{/**N指二叉树节点的个数*/int N;scanf("%d %s %s", &N, pre, ino);BiTree T = build(pre, ino, N);printf("postorder:");postOrder(T);printf("\n");
}//中后先
#include<stdio.h>
#include<stdlib.h>#define MAXN 30
typedef int ElementType;
typedef struct TNode *BinTree;
struct TNode
{ElementType Data;BinTree Left;BinTree Right;
};
typedef BinTree Position;
BinTree BuildTree(int Inorder[],int Postorder[],int N);
void PreorderTraversal(BinTree BT);
int main()
{BinTree T;int Inorder[MAXN],Postorder[MAXN];int N,i;scanf("%d",&N);for(i=0;i<N;i++)scanf("%d",&Postorder[i]);//后序 for(i=0;i<N;i++)scanf("%d",&Inorder[i]);//前序T=BuildTree(Inorder,Postorder,N);printf("Preorder:");PreorderTraversal(T);printf("\n");return 0;} BinTree BuildTree(int Inorder[],int Postorder[],int N){int p=0;if(!N) return NULL;BinTree T=(BinTree)malloc(sizeof(struct TNode));T->Left=T->Right=NULL; T->Data=Postorder[N-1];//这一小段的根节点for(p=0;p<N;p++)if(Inorder[p]==Postorder[N-1])break;//找到中序中根节点的位置 T->Left=BuildTree(Inorder,Postorder,p);//前p个为左子树T->Right=BuildTree(Inorder+p+1,Postorder+p,N-p-1);  return T;}
void PreorderTraversal(BinTree BT)
{if(BT){printf(" %d",BT->Data);PreorderTraversal(BT->Left);PreorderTraversal(BT->Right);}}

由先序中序得后序,中序后序得先序代码实现相关推荐

  1. ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...

  2. 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 #i ...

  3. C语言,有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中

    C语言,有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中 代码: #include <stdio.h> int main() {int a[11]={1,2,3,4, ...

  4. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中——C语言

    1 概述 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中. 2 解法 //C程序设计第五版(谭浩强) //章节:第六章 利用数组处理批量数据 //题号:6.4 //题目:有一个 ...

  5. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中,谭浩强《c语言程序设计》第六章第四题

    题目 本题是谭浩强<c语言程序设计>第六章第四题 题目:有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中. 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同 ...

  6. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中

    有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中(C语言) 题目要求:如标题 思路: 如果一个数列由小到大排列,则对数列进行反向遍历.当遇到输入的数x大于a[i]时,就跳出循环 ...

  7. 【C】有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中

    //有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中 #include <stdio.h> int main(){int a[10]={14,23,45,67,84, ...

  8. 由中序和后序(前序)序列求前序(后序)序列

    已知二叉树的中序和后序(前序)序列可以唯一确定一颗二叉树,例如, 中序序列:1 2 3 4 5 6 后序序列:3 4 2 6 5 1 可以唯一确定一颗二叉树,如下图: 思路是这样的:     我们知道 ...

  9. C语言-数组和指针-11(已有一个排号序的数组,要求输入一个数后,按原来的排序规律将它插入数组中)

    题目: 已有一个排号序的数组,要求输入一个数后,按原来的排序规律将它插入数组中 源代码: #include <stdio.h> #define ROW 7 int main(){int a ...

  10. 6-5 从键盘读入一串字符后去除首尾字符后的字符串按降序排序 (10 分)请编写函数Sort函数,将字符串中除首、尾字符外的其余字符按降序排列。函数接口定义:void Sort( char *

    6-5 从键盘读入一串字符后去除首尾字符后的字符串按降序排序 (10 分) 请编写函数Sort函数,将字符串中除首.尾字符外的其余字符按降序排列. 函数接口定义: void Sort( char *p ...

最新文章

  1. html怎么压缩ttf,如何使用CSS包含.ttf字体?
  2. AlarmManager类的应用(实现闹钟功能)
  3. 线段树 洛谷 p1531 I hate it(I hate it too)
  4. bootstrape实战案例_bootstrap 实战入门教程(一)
  5. SpriteKit游戏开发适配iPad/iPhone6/7/8/Plus及iPhoneX的尺寸及安全区域
  6. javabean和java类_java对象 POJO和JavaBean的区别
  7. 1.Kubernetes 简介
  8. java小游戏跳棋_Java跳棋小游戏源代码
  9. CCNA学习指南中文第七版-1
  10. arcMap安装教程
  11. 2022 Java面试题
  12. 国科大学习资料--矩阵分析与应用(李保滨)--2016年期末考试试卷
  13. php onvif截图,基于C#的onvif协议之抓图
  14. 《微信小程序进阶实战之分答应用开发(中级项目)》(完整版)
  15. 软件工程第二次作业——模仿实现主流网页
  16. 送书 | 教你爬取电影天堂数据
  17. 抗D保 | 抗D宝 | 知道创宇云安全
  18. 咸鱼的 GitHub 情报 | 20200103 期
  19. CAN总线电容过大的有效解决方法
  20. 小程序如何本地去水印,基于很多小白写的教程

热门文章

  1. Blender人物骨骼绑定
  2. 好家伙,这几个隐藏功能,太香了
  3. 红米NOTE5 ROOT教程
  4. 【UCIe】UCIe NOP 介绍
  5. 华为系统更新彻底卸载_华为手机系统更新好吗 华为手机系统更新方法
  6. 一站式数字藏品收款系统开发解决方案
  7. 【TouchDesigner】用Replicator制作选择器
  8. linux内核裁剪的具体过程和选择
  9. 浅谈API开发安全之sign有效时间(三)
  10. 用Python制作生日蛋糕、生日快乐,生日祝福代码