前序加中序求二叉树后序序列
来源:互联网 发布:新郎接亲游戏知乎 编辑:程序博客网 时间:2024/05/29 18:02
#include <map>#include <set>#include <stack>#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn=1000;char pre[maxn],in[maxn];struct Node { char val; Node *left,*right; Node(char v=0,Node *l=NULL,Node *r=NULL):val(v),left(l),right(r){}};Node *makeTree(int i,int j,int size) //i表示前序遍历序列的开始下标,j是中序遍历的下标,size表示序列长度{ if(size==0) //size为空说明子树为空树,返回NULL return NULL; int root; for(int k=j;k<j+size;k++) //选择前序遍历中的根在中序遍历序列中的位置,由此确定左右子树的节点个数,root一定可以找到 { if(pre[i]==in[k]) { root=k;break; } } int leftNum=root-j; //左子树的节点个数 int rightNum=size-leftNum-1;//右子树的节点个数 Node *left=makeTree(i+1,j,leftNum);//i+1为左子树的根 Node *right=makeTree(i+leftNum+1,root+1,rightNum);//i+leftNum+1为右子树的根 Node *r=new Node(pre[i],left,right);//生成根节点 return r;}void deleteTree(Node *root)//递归删除树{ if(root==NULL) return; deleteTree(root->left); deleteTree(root->right); delete root;}void postOrder(Node *root){ if(!root) return; postOrder(root->left); postOrder(root->right); printf("%c",root->val);}int main(){#ifdef LOCAL_DEBUGfreopen("input.txt","r",stdin);#endif while(~scanf("%s%s",pre,in)) { Node *root = makeTree(0,0,strlen(pre)); postOrder(root); deleteTree(root); } return 0;}
0 0
- 前序加中序求二叉树后序序列
- 二叉搜索树后序序列
- 根据二元树后序序列建立二叉树
- 判断序列是否为二叉树后序遍历
- 二叉搜索树后序遍历序列判断
- 二叉树中后序序列求先序序列
- 二叉树序列化
- 二叉树序列化
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- Java面向对象总结(16.7.10)
- 简单工厂模式
- Notepad++下Python的自动补全
- Read N Characters Given Read4
- 7 - 9月学习计划
- 前序加中序求二叉树后序序列
- RecyclerView添加头部和尾部
- 1.ARM汇编基础
- 一点思考
- 我的首篇文章
- Sqoop源码浅析
- python算法——字符串表达式的计算
- [学习笔记]实时SLAM的未来及深度学习与SLAM对比
- js调试控制台使用详解图解