由二叉树的后序和中序结果求取先序结果
2016-04-03 01:38
253 查看
递归:
非递归:
#include<iostream> #include<cstdio> #include<string> using namespace std; string x,y; void write(int p,int q,int m,int n) { if(p>q)return; if(p==q){cout<<x[p];return;} int i,j,k; k=x.find(y ); //后序的最后一个是根节点 cout<<y ; //每次输出根节点 //以根节点将中序结果分成左右子树分别进行递归调用 write(p,k-1,m,m+k-p-1); write(k+1,q,m+k-p,n-1); } int main() { int i,j,k; cin>>x>>y; k=x.length(); write(0,k-1,0,k-1); return 0; }
非递归:
#include <iostream> #include<string.h> using namespace std; struct TreeNode { struct TreeNode* left; struct TreeNode* right; char elem; }; TreeNode* BinaryTreeFromOrderings(char* inorder, char* postorder, int length) { if(length == 0) { return NULL; } TreeNode* node = new TreeNode; node->elem = *(postorder+length-1);//后序的最后一个是根节点 cout<<node->elem; int rootIndex = 0; for(;rootIndex <length; rootIndex++) { if(inorder[rootIndex] == *(postorder+length-1))//找到根节点在中序中的位置 break; } //递归左子树 node->left = BinaryTreeFromOrderings(inorder, postorder, rootIndex); //递归右子树 node->right = BinaryTreeFromOrderings(inorder + rootIndex + 1, postorder + rootIndex, length - (rootIndex+1)); return node; } int main() { char* in; char* po; int len; cin>>in; cin>>po; len=strlen(in); BinaryTreeFromOrderings(in, po, len); printf("\n"); return 0; }
相关文章推荐
- 15 个实用的 PHP 正则表达式
- 作用域链,预解析,复杂面试题详解
- Nginx 使用IP限制访问来源
- a毛 jquery 学习记 2(下) 基础核心
- 古典经济学和新古典经济学(转载自百度知道)
- sys用户登录出现错误提示 ORA-28009:connection as SYS should be as SYSDBA OR SYSOPER
- 线程池与工厂模式、代理模式的结合使用
- 【GOF23设计模式】_单例模式
- Python3使用requests模块显示下载进度
- J2EE+Tomcat环境配置
- J2EE+Tomcat环境配置
- J2EE+Tomcat环境配置
- J2EE+Tomcat环境配置
- J2EE+Tomcat环境配置
- J2EE+Tomcat环境配置
- J2EE+Tomcat环境配置
- J2EE+Tomcat环境配置
- Maven项目管理
- H2O with R 简明使用手记·上篇
- dubbo协议下的单一长连接与多线程并发如何协同工作