二叉树已知(中序+一序)求另一序
来源:互联网 发布:super kamagra 淘宝 编辑:程序博客网 时间:2024/06/06 05:00
#include <iostream>#include <cstring>using namespace std;char pre[50] = "ABDHLEKCFG"; //前序序列char mid[50] = "HLDBEKAFCG"; //中序序列char post[50] = "LHDKEBFGCA"; //后序序列typedef struct _Node{ char v; struct _Node *left; struct _Node *right;}Node, *PNode;void PostTravelTree(PNode pn); //树的后序递归遍历void PreTravelTree(PNode pn); //树的前序递归遍历void PreMidCreateTree(PNode &pn, int i, int j, int len); //利用前序中序序列创建树void PostMidCreateTree(PNode &pn, int i, int j, int len); //利用后序中序序列创建树int Position(char c); //确定c在中序序列mid中的下标,假设树的各个节点的值各不相同int main() { PNode root1 = NULL, root2= NULL; PreMidCreateTree(root1, 0, 0, strlen(mid)); PostTravelTree(root1); cout<<endl; PostMidCreateTree(root2, strlen(post)-1, 0, strlen(mid)); PreTravelTree(root2); cout<<endl; return 0;}int Position(char c){ cout<<strchr(mid,c)<<endl; return strchr(mid,c)-mid;}/* 利用前序中序序列创建树,参考了 * i: 子树的前序序列字符串的首字符在pre[]中的下标 * j: 子树的中序序列字符串的首字符在mid[]中的下标 * len: 子树的字符串序列的长度 */void PreMidCreateTree(PNode &pn, int i, int j, int len){ if(len <= 0){ pn = NULL; return; } pn = new Node; pn->v = pre[i]; int m = Position(pre[i]); PreMidCreateTree(pn->left, i+1, j, m-j); //m-j为左子树字符串长度 PreMidCreateTree(pn->right, i+(m-j)+1, m+1, len-1-(m-j)); //len-1-(m-j)为右子树字符串长度}/* 利用后序中序序列创建树 * i: 子树的后序序列字符串的尾字符在post[]中的下标 * j: 子树的中序序列字符串的首字符在mid[]中的下标 * len: 子树的字符串序列的长度 */void PostMidCreateTree(PNode &pn, int i, int j, int len){ if(len <= 0){ pn = NULL; return; } pn = new Node; pn->v = post[i]; int m = Position(post[i]); PostMidCreateTree(pn->left, i-1-(len-1-(m-j)), j, m-j);//注意参数:m-j左子树的长度,len-1-(m-j)右子树的长度 PostMidCreateTree(pn->right, i-1, m+1, len-1-(m-j));}void PostTravelTree(PNode pn) //后序递归遍历{ if(pn) { PostTravelTree(pn->left); PostTravelTree(pn->right); cout<<pn->v<<" "; }}void PreTravelTree(PNode pn) //前序递归遍历{ if(pn) { cout<<pn->v<<" "; PreTravelTree(pn->left); PreTravelTree(pn->right); }}
阅读全文
0 0
- 二叉树已知(中序+一序)求另一序
- 重建二叉树(已知两序求另一序)
- 已知二叉树前、中序遍历,求…
- 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
- 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
- 已知二叉树的前序,中序,后序遍历中的两个,求另一个
- 已知中序和先序,求二叉树的重构问题
- 二叉树遍历,已知前序遍历与中序遍历,求后续遍历 使用java(递归方式)实现
- 已知二叉树的前序与中序遍历序列,求重建后的二叉树(即是二叉树的重建)
- 二叉树构造 (已知先序 和中序)
- 二叉树遍历(已知中序、先序求后序)
- 已知先序+中序构造二叉树,已知后序+中序构造二叉树(C语言)
- 已知二叉树的前序遍历和中序遍历,求二叉树的后序遍历
- 已知二叉树的前序序列和中序序列,求二叉树的后序序列
- 二叉树——已知二叉树先序,建树,并输出中序、后序,并求树叶数和深度
- 已知二叉树先序和中序遍历,生成二叉树
- 返回一棵二叉树,中序遍历序列必须已知
- 已知先序遍历和中序遍历,求后序遍历 && 求二叉树中节点的最大距离
- DHtmlX中combo的基础使用
- 二维数组 C语言优先级记忆Tips
- Comparable与Comparator的区别
- NameError: name 'FileNotFoundError' is not defined的解决方案
- 牛客网编程题
- 二叉树已知(中序+一序)求另一序
- android 水准仪的实现(方向传感器的使用)
- Android-TextView设置多种颜色及部分点击事件
- 理解js设计模式之代理模式
- Eureka常见问题
- PullToRefreshListView实现下拉刷新
- 在window上搭建服务器(tomcat、mysql、eclipse)
- Java 解惑:Comparable 和 Comparator 的区别
- AT指令获取基站信息