已知后序中序序列求先序序列
来源:互联网 发布:知乎杭州电子科技大学 编辑:程序博客网 时间:2024/06/06 02:13
方法呢,与前一篇一样,建树或者不建树皆可,这里不做过多说明,直接show code。
WAY 1.
typedef struct TreeNode *BinTree;struct TreeNode{ char key; BinTree left; BinTree right; TreeNode(char _key):key(_key), left(NULL), right(NULL){}};
BinTree buildTree(char *post, char *in, int n){ if(n == 0) return NULL; BinTree node = new TreeNode(post[n - 1]); //注意后序序列中最后一个才是根节点 int i; for(i = 0; i < n && in[i] != post[n - 1]; ++i) //确定根节点在中序序列中的位置 ; int lenLeft = i, lenRight = n - i - 1; //根节点左右子树的节点数 node->left = buildTree(post, in, lenLeft); //注意传递的参数 node->right = buildTree(post + lenLeft, in + lenLeft + 1, lenRight); return node;}
WAY 2.
const int maxn = 100;char pre[maxn], in[maxn], post[maxn];
/* call: toPreSeq(0, 0, 0, strlen(post));*/void toPreSeq(int postIndex, int inIndex, int preIndex, int n){ if(n == 0) return; if(n == 1){ pre[preIndex] = post[postIndex]; return; } char root = post[postIndex + n - 1]; int i; pre[preIndex] = root; for(i = 0; i < n && in[inIndex + i] != root; ++i) ; int lenLeft = i, lenRight = n - i - 1; toPreSeq(postIndex, inIndex, preIndex + 1, lenLeft); //注意传参 toPreSeq(postIndex + lenLeft, inIndex + lenLeft + 1, preIndex + lenLeft + 1, lenRight);}
note: 此算法正确的前提是保证后序中序序列正确。
0 0
- 已知后序中序序列求先序序列
- 已知先序中序序列求后序序列
- 已知前序中序序列,求后序遍历序列
- 已知进栈序列,求出栈序列
- 已知二叉树先序序列和中序序列,求后序序列
- 二叉树中,已知中序和后序序列,求先序序列
- 已知中序遍历序列和后序遍历序列,求先序遍历
- 二叉树系列(二):已知中序遍历序列和后序遍历序列,求先序遍历序列
- 已知二叉树先序和中序序列 求后序序列
- 已知压栈序列,判断合法的弹出序列
- 已知先序序列、中序序列创建二叉树
- 数据结构之已知二叉树前中序列求后序
- 二叉树 已知两个序列,建
- 二叉树-已知前序序列和中序序列,求后序序列
- 序列
- 序列
- 序列
- 序列
- 72. Rectangle Area
- 【技巧】将Sublime Text 添加到鼠标右键的方法
- 超全!整理常用的iOS第三方资源
- You have set Tablespace Full Metrics Threshold values for the USERS tablespace as follows: Warning (
- [iOS]CocoaPods使用小结
- 已知后序中序序列求先序序列
- python图像处理接口
- 2015年十大热门Android开源新项目
- 物理层的主要功能
- 对于二叉树三种非递归遍历方式的理解
- 李航《统计学习方法》读书笔记(1):朴素贝叶斯分类
- HDU 2544 最短路(Dijkstra)
- ThreadPoolExecutor详解
- week1——并查集