输入前序/后序+中序 遍历结果重建二叉树(递归)
来源:互联网 发布:翼支付企业版下载软件 编辑:程序博客网 时间:2024/06/02 05:44
给定二叉树的前序遍历和中序遍历结果,或者后序遍历和中序遍历结果(必须得有中序遍历),能唯一确定一棵二叉树,那么如何利用程序重建这棵二叉树呢?
情形一:输入前序遍历,中序遍历,重建二叉树
//输入前序 中序遍历结果,调用重建,返回根结点指针赋给rootvoid BinaryTree::pCreateBinaryTree(){ cout<<"请输入前序遍历结果:"; char A[Max],B[Max]; int i=0,n; while((A[i]=cin.get())!='\n')i++; n=i; cout<<endl<<"请输入中序遍历结果:"; for(i=0;i<n;i++) cin>>B[i]; root=pCreateBinaryTree(A,B,n); cout<<endl<<"重建二叉树成功。"<<endl;}Node* BinaryTree::pCreateBinaryTree(char *pre,char *in,int n)//按前序 中序遍历结果重建二叉树,返回根结点指针//pre是前序遍历结果,in是中序遍历结果,n表示处理的树结点个数,返回二叉树的根结点指针{ if(n==0) return NULL; //结点数为0,不处理,返回空,即上一轮处理的是叶节点 int k=0; while(pre[0]!=in[k]) k++; //找到前序遍历中根结点在中序遍历的下标k,即左边k个元素是左子树 //右边n(n-k-1)个元素是右子树 Node *p=new Node( pre[0] ); //创建根结点,同时赋值 p->lchild=pCreateBinaryTree(pre+1,in,k); //从前序MTR+1开始对中序LMR的0~k-1 共k个元素递归处理建立左子树 p->rchild=pCreateBinaryTree(pre+k+1,in+k+1,n-(k+1)); //从前序MTR[k+1]个元素开始对中序的k+1~n-1右子序列的n-k-1个元素递归建立右子树 return p;}
情形二:输入后序遍历,中序遍历,重建二叉树
//输入后序遍历 中序遍历结果,重建二叉树,返回根节点指针,赋给rootvoid BinaryTree::lCreateBinaryTree(){ char ch; ch=cin.get(); //cin不接受回车符,故上一次输入的回车符仍在输入流中,用ch接收"除去"该回车符 char A[Max],B[Max],C[Max]; int i=0,j,n; cout<<"请输入后序遍历结果:"; while((A[i]=cin.get())!='\n') i++; n=i; cout<<"请输入中序遍历结果:"; for(i=0;i<n;i++) cin>>B[i]; for(i=n-1,j=0;i>=0;i--,j++) C[j]=A[i]; //将后序遍历结果倒序得到C 传入重建函数中 root=lCreateBinaryTree(C,B,n);}//按后序 中序遍历结果重建二叉树,返回根结点指针,赋给rootNode * BinaryTree::lCreateBinaryTree(char *post,char *in,int n){ if(n==0) return NULL; int k=0; while(post[0]!=in[k]) k++; Node *p=new Node(post[0]); p->lchild=lCreateBinaryTree(post+n-k,in,k); p->rchild=lCreateBinaryTree(post+1,in+k+1,n-k-1); return p;}
0 0
- 输入前序/后序+中序 遍历结果重建二叉树(递归)
- 根据前序遍历和中序遍历结果重建二叉树(递归方法)
- 输入某二叉树的前序和中序遍历结果,重建该二叉树
- 前序和中序重建二叉树, 树的前序递归,中序递归,后序递归遍历和前序非递归,中序非递归,后序非递归遍历
- 二叉树的遍历;前序 中序 后序遍历二叉树;递归 非递归实现; 重建二叉树;编程之美重建二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,重建此二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 重建二叉树并非递归前序/中序/后序遍历
- 重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出二叉树,假设输入的前序和中序遍历结果中不含重复的数字
- 重建二叉树---根据前序和中序遍历结果重建二叉树
- 重建二叉树——输入前序、中序遍历构建二叉树并输出后序遍历
- matlab 聚类
- CSU 1542 Flipping Parentheses
- 数据结构之表
- c++第四次作业
- Android内存优化之OOM
- 输入前序/后序+中序 遍历结果重建二叉树(递归)
- HDU 5661 Claris and XOR
- python:有序字典与嵌套字典
- 使用Fresco下载图片
- OpenGL ES3.0 的初探
- 12个顶级开发者社区网站帮助程序员走上人生巅峰
- hdu 5647 DZY Loves Connecting (树形dp)
- Filter-统一全站编码
- 图(graph)