C语言学习笔记——根据二叉树的后序和中序遍历序列,求这棵树的先序和层次遍历序列
先根据二叉树的后序和中序遍历序列,用递归的方法创建出这棵树,然后用的自定义栈的先序和层次方法遍历。
输入: 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语言学习笔记——根据二叉树的后序和中序遍历序列,求这棵树的先序和层次遍历序列相关推荐
- 梓益C语言学习笔记之链表&动态内存&文件
梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...
- 梓益C语言学习笔记之指针
梓益C语言学习笔记之指针 一.32位平台下,地址是32位,所以指针变量占32位,共4个字节 二.内存单元的地址即为指针,存放指针的变量称为指针变量,故:"指针"是指地址,是常量,& ...
- c语言中void arrout,c语言学习笔记(数组、函数
<c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...
- c语言float二进制输出代码_C语言学习笔记——学前知识概述
将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...
- go get 拉取指定版本_go语言学习笔记-基础知识-3
相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...
- 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置
相关文档 go语言学习笔记-目录 1.安装 1.1.访问 https://golang.google.cn/dl/ 或 https://golang.org/dl/ 下载官方安装包 1.2.选择Win ...
- Ink脚本语言学习笔记(二)
目前想要基于Ink脚本语言和Unity新的UIToolkit做一套对话系统,本文对Ink脚本语言的使用方式做一下介绍和总结 Ink脚本语言学习笔记(一) 二.缝合(Weave) 目前没想好怎么翻译这个 ...
- C语言学习笔记-P1 初识C语言(2)
C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...
- C语言学习笔记-P1 初识C语言(1)
C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...
最新文章
- URAL 1203 Scientific Conference(贪心 || DP)
- 即构科技金健忠:回顾20年音视频技术演进
- 【结论题(QAQ)】SSL新年欢乐赛暨BPM退役赛 A 送分题(luogu U102372)
- python+selenium获取cookie session_selenium获取cookie及设置cookie
- 【j2ee spring】30、巴巴荆楚网-综合hibernate4+spring4(5)分页
- Xpath在选择器中正确,在代码中返回的是空列表问题
- 一键部署Zabbix客户端
- 【codevs1576】最长严格上升子序列
- [独孤九剑]持续集成实践(二)– MSBuild语法入门
- 机器学习:概念学习FIND-S算法C++实现
- Vue3中Compositions API的使用(一)
- 谁能和乔布斯比勤奋?乔布斯的睡眠时间
- jersey tomcat MySQL_基于jersey和Apache Tomcat构建Restful Web服务(一)
- 达思SQL数据库修复软件1.7(支持碎片重组、支持勒索病毒加密的sql数据库修复软件)
- 套件端口 群晖_群晖NAS安装teamviwer套件,桌面版远程访问群晖设置教程
- 好玩的Java塔防游戏,比较火的塔防手游!塔防游戏排行榜推荐
- 刷新页面Vue Whitelabel Error Page
- smil_SMIL简介-鞋串上的多媒体演示
- 元宵节一起来炸汤(chu)圆(fang)
- balabala---莫队
热门文章
- 关键词提取有哪些方案?刘志远回答
- 新华三:让地铁更智慧
- java在windows下启动jar包使用utf-8格式
- 行人检测-Caltech Pedestrian Dataset 数据集下载及格式转换
- 我的 网上商城网站布局 练习(含效果图和源码)
- 计算机音乐制作专业 考研,音乐专业考研院校排名
- 自我总结前端vue笔记
- java 俄罗斯方块消除整行_帮忙看下我的俄罗斯方块满行删除方法,为嘛一次只能删除1行。。...
- 一步步读懂Pytorch Chatbot Tutorial代码(二) - 数据处理
- php获取目录下所有文件及目录(多种方法)