对于一棵二叉树而言,可以由其前序和中序或者中序和后序的遍历序列,确定一棵二叉树。那么对于已知前序和中序序列,求后序序列也就是先还原二叉树,然后对其进行后序遍历即可。二叉树结点的结构定义如下:struct TreeNode{ char value; TreeNode *leftChild;...
分类:
其他好文 时间:
2015-11-16 21:17:14
阅读次数:
223
本文是数据结构基础系列(6):树和二叉树中第13课时二叉树的构造的例程。1.由先序序列和中序序列构造二叉树
定理:任何n(n≥0)个不同节点的二叉树,都可由它的中序序列和先序序列唯一地确定。
证明(数学归纳法)
基础:当n=0时,二叉树为空,结论正确。
假设:设节点数小于n的任何二叉树,都可以由其先序序列和中序序列唯一地确定。
归纳:已知某棵二叉树具有n(n>0)个不同节点,其先序序列是a0a...
分类:
其他好文 时间:
2015-10-20 06:40:06
阅读次数:
246
知识:在先序遍历中,第一个结点就是二叉树的根节点;而在中序遍历中,根节点必然将中序序列分割成两个子序列,前一个子序列就是根节点的左子树的中序序列,后一个是根节点的右子树的中序序列。同样,给定后序序列和中序序列,按层次序列和中序序列可以也可以唯一确定一棵二叉树。但是,如果知道二叉树的先序序列和后序序列...
分类:
其他好文 时间:
2015-10-08 16:09:05
阅读次数:
120
该问题用递归的思路很好解决,每一次取前序序列的首元素作为当前子树的根节点,然后在中序序列中找到对应的节点,以此可以确定根节点对应的左子树和右子树的序列长度,递归构造根节点的左子树和右子树即可。
TreeNode *execBuild(vector &preorder, int prestart, int preend, vector &inorder, int instart, int inen...
分类:
其他好文 时间:
2015-08-31 19:48:01
阅读次数:
162
这道题之前算法课上好像遇到过,思路也很简单的。思路:后序序列的最后一个元素就是树根,然后在中序序列中找到这个元素(由于题目保证没有相同的元素,因此可以唯一找到),中序序列中这个元素的左边就是左子树的中序,右边就是右子树的中序,然后根据刚才中序序列中左右子树的元素个数可以在后序序列中找到左右子树的后序...
分类:
编程语言 时间:
2015-08-26 22:13:40
阅读次数:
243
PHP递归实现根据前序序列和中序序列,重建一颗树...
分类:
Web程序 时间:
2015-08-21 23:29:54
阅读次数:
177
说明:本次实验利用中序和先序序列,采用递归方式来构建二叉树 。经过几天的失败和思考,我认为递归构建二叉树的过程中最重要的是递归单元,最麻烦的是递归参数的选择和传递。简单将算法过程用如下流程图来表示:(本帖所用算法及图片均为原创内容,转贴注明出处)算法:1.根据先序序列,建立根结点T 2.寻找中序序列...
分类:
其他好文 时间:
2015-08-17 23:32:40
阅读次数:
253
http://acm.hdu.edu.cn/showproblem.php?pid=1710Binary Tree TraversalsTime Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Tot...
分类:
其他好文 时间:
2015-07-10 02:13:21
阅读次数:
247
重建二叉树时间限制:1000ms | 内存限制:65535KB难度:3描述题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。输入输入有多组数据(少于100组),以文件结尾结束。每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小...
分类:
其他好文 时间:
2015-06-06 22:02:36
阅读次数:
169
这是一道很直接的给出中序序列和任一其他序列生成二叉树的问题,本题给出的是后序遍历和中序遍历,利用后序遍历的“左右根”顺序我们知道,后序序列的最后一个元素一定是整棵树的根,从后向前,分别是右、左子树的根,因此通过后序序列可以找到一系列的根,他们的顺序是当前所在的根、右子树的根、左子树的根,每次在中序序列中定位出根的位置,根据中序序列“左根右”的顺序我们知道,根左边的一定是左子树,右边的一定是右子树,就这样递归解决子树问题即可,最后通过BFS来进行层序遍历。...
分类:
其他好文 时间:
2015-05-30 14:58:22
阅读次数:
134