先根据二叉树的后序和中序遍历序列,用递归的方法创建出这棵树,然后用的自定义栈的先序和层次方法遍历。

输入:  7

2 3 1 5 7 6 4   
                  1 2 3 4 5 6 7

输出:

#include <stdio.h>
#define max 50
typedef int Elemtype;
int pre[max], in[max], post[max];typedef struct BTNode{Elemtype data;struct BTNode *lchild, *rchild;
}BTree;/* according to the postorder and inorder travelsalsequences to create a binary tree */
BTree* create(Elemtype postL, Elemtype postR, Elemtype inL, Elemtype inR){if(postL > postR)return NULL;BTree *root;root =  (BTree*)malloc(sizeof(BTree));root->data = post[postR];                //后序遍历序列的最后一个结点就是当前树的根结点int k;for(k = inL; k <= inR; k++){if(in[k] == post[postR])             //寻找当前树的根节点在中序遍历序列中的位置break;}int numLeft = k - inL;                   //root的左子树的结点总数root->lchild = create(postL, postL + numLeft - 1, inL, k - 1);  //root的左孩子所在的区间:中序 in[inL, k-1]//后序post[postL, postL + numLeft - 1]root->rchild = create(postL + numLeft, postR - 1, k + 1, inR);return root;                                                    //递归返回根结点地址
}/* preorder traversal bases on user-defined stack*/
void preorderstack(BTree *root){BTree *stack[max];                      //自定义顺序栈int top = -1;                           //栈顶指针stack[++top] = root;                    //根结点进栈BTree *p;while(top != -1){p = stack[top--];                   //出栈,访问根printf("%d ", p->data);if(p->rchild != NULL)               //若右孩子存在,让它进栈stack[++top] = p->rchild;       //注意,先让右孩子入栈if(p->lchild != NULL)               //若左孩子存在,让它进栈stack[++top] = p->lchild;}
}/* level-order traversal bases on user-defined stack*/
void levelorder(BTree *root){BTree *queue[max];                      //自定义顺序循环队列int front =0, rear = 0;                 //队头/尾rear = (rear +1) % max;queue[rear] = root;                     //根结点进队BTree *p;while(front != rear){front = (front + 1)%max;p = queue[front];printf("%d ", p->data);if(p->lchild != NULL){rear = (rear + 1) % max;queue[rear] = p->lchild;}if(p->rchild != NULL){rear = (rear + 1) % max;queue[rear] = p->rchild;}}
}int main(){int n;        //树的结点个数printf("Total number of nodes: ");scanf("%d", &n);printf("Postorder: ");for(int i = 0; i < n; i++){scanf("%d", &post[i]);}printf("Inorder: ");for(int i = 0; i < n; i++){scanf("%d", &in[i]);}BTree *root = create(0, n - 1, 0, n - 1);printf("Preorder: ");preorderstack(root);printf("\nLevelorder: ");levelorder(root);return 0;
}

C语言学习笔记——根据二叉树的后序和中序遍历序列,求这棵树的先序和层次遍历序列相关推荐

  1. 梓益C语言学习笔记之链表&动态内存&文件

    梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...

  2. 梓益C语言学习笔记之指针

    梓益C语言学习笔记之指针 一.32位平台下,地址是32位,所以指针变量占32位,共4个字节 二.内存单元的地址即为指针,存放指针的变量称为指针变量,故:"指针"是指地址,是常量,& ...

  3. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  4. c语言float二进制输出代码_C语言学习笔记——学前知识概述

    将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...

  5. go get 拉取指定版本_go语言学习笔记-基础知识-3

    相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...

  6. 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置

    相关文档 go语言学习笔记-目录 1.安装 1.1.访问 https://golang.google.cn/dl/ 或 https://golang.org/dl/ 下载官方安装包 1.2.选择Win ...

  7. Ink脚本语言学习笔记(二)

    目前想要基于Ink脚本语言和Unity新的UIToolkit做一套对话系统,本文对Ink脚本语言的使用方式做一下介绍和总结 Ink脚本语言学习笔记(一) 二.缝合(Weave) 目前没想好怎么翻译这个 ...

  8. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  9. C语言学习笔记-P1 初识C语言(1)

    C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...

最新文章

  1. URAL 1203 Scientific Conference(贪心 || DP)
  2. 即构科技金健忠:回顾20年音视频技术演进
  3. 【结论题(QAQ)】SSL新年欢乐赛暨BPM退役赛 A 送分题(luogu U102372)
  4. python+selenium获取cookie session_selenium获取cookie及设置cookie
  5. 【j2ee spring】30、巴巴荆楚网-综合hibernate4+spring4(5)分页
  6. Xpath在选择器中正确,在代码中返回的是空列表问题
  7. 一键部署Zabbix客户端
  8. 【codevs1576】最长严格上升子序列
  9. [独孤九剑]持续集成实践(二)– MSBuild语法入门
  10. 机器学习:概念学习FIND-S算法C++实现
  11. Vue3中Compositions API的使用(一)
  12. 谁能和乔布斯比勤奋?乔布斯的睡眠时间
  13. jersey tomcat MySQL_基于jersey和Apache Tomcat构建Restful Web服务(一)
  14. 达思SQL数据库修复软件1.7(支持碎片重组、支持勒索病毒加密的sql数据库修复软件)
  15. 套件端口 群晖_群晖NAS安装teamviwer套件,桌面版远程访问群晖设置教程
  16. 好玩的Java塔防游戏,比较火的塔防手游!塔防游戏排行榜推荐
  17. 刷新页面Vue Whitelabel Error Page
  18. smil_SMIL简介-鞋串上的多媒体演示
  19. 元宵节一起来炸汤(chu)圆(fang)
  20. balabala---莫队

热门文章

  1. 关键词提取有哪些方案?刘志远回答
  2. 新华三:让地铁更智慧
  3. java在windows下启动jar包使用utf-8格式
  4. 行人检测-Caltech Pedestrian Dataset 数据集下载及格式转换
  5. 我的 网上商城网站布局 练习(含效果图和源码)
  6. 计算机音乐制作专业 考研,音乐专业考研院校排名
  7. 自我总结前端vue笔记
  8. java 俄罗斯方块消除整行_帮忙看下我的俄罗斯方块满行删除方法,为嘛一次只能删除1行。。...
  9. 一步步读懂Pytorch Chatbot Tutorial代码(二) - 数据处理
  10. php获取目录下所有文件及目录(多种方法)