重建二叉树
2015-12-05 16:51
302 查看
问题:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
<pre name="code" class="cpp">#include <stdio.h> #include <stdlib.h> typedef struct TNode { int value; TNode *lchild; TNode *rchild; }TNode,*BTree; BTree creat_tree(int preOrder[],int startPre,int endPre,int inOrder[],int startIn,int endIn) { if((endPre - startPre) != (endIn - startIn)) return NULL; if(startPre > endPre) return NULL; BTree tree = (BTree)malloc(sizeof(TNode)); tree->value = preOrder[startPre]; tree->lchild = NULL; tree->rchild = NULL; if(startPre == endPre) return tree; int index,length; for(index = startIn;index < endIn;index++)// if(preOrder[startPre] == inOrder[index]) break; //有左子树 if(index > startPre) { length = index - startPre; tree->lchild = creat_tree(preOrder,startPre+1,startPre+length,inOrder,startIn,startIn+length-1); } //有右子树 if(index < endIn) { length = endIn - index; tree->rchild = creat_tree(preOrder,endPre-length+1,endPre,inOrder,endIn-length+1,endIn); } return tree; } //后序遍历二叉树 void postTraverse(BTree tree) { if(tree->lchild != NULL) postTraverse(tree->lchild); if(tree->rchild != NULL) postTraverse(tree->rchild); printf("%d\t",tree->value); } int main() { int preOrder[7] = {1,2,4,7,3,6,8}; int inOrder[7] = {4,7,2,1,3,8,6}; BTree tree = creat_tree(preOrder,0,6,inOrder,0,6); postTraverse(tree); printf("\n"); return 0; }
相关文章推荐
- 关于工业4.0和智能制造的总结以及背后的思考
- 第六次作业
- DrawerLayout 使用
- 设计模式之装饰者模式(一)
- 《TCP/IP详解 卷1:协议》 读书笔记 第十章 动态选路协议
- 存储管理
- 最短路
- hdoj--2955--Robberies(背包好题)
- 关于 约瑟夫问题,报道m值的数出列。
- android 引用资源时,?android和@android的区别
- PHP扩展模块安装
- cc2530裸机编程系列笔记2--定时器Timer1模模式程序(中断方式)
- Swing多线程编程
- hdoj--2955--Robberies(背包好题)
- Life Forms 后缀数组 不小于k个字符串中的最长子串
- 设计模式之责任链模式
- ceph rgw中的md_config_obs_t类
- 营业税
- 转:为什么要有handler机制?
- 布尔值