给出二叉树的先序和中序,求二叉树的后续遍历
2015-12-31 09:58
218 查看
解析:
首先分析:给出先序遍历的二叉树的结果,我们知道先序是:根 左 右;中序是:左 根 右;
那么我们很容易就知道在先序遍历中可以确定二叉树的根所在的位置,其次再在中序遍历中找出根的左边和右边,这样不断的递归就会将原来的二叉树构建
出来,之后再进行后续遍历:左 右 根;
伪代码如下:
/*
思想:根据二叉树的先序序列和中序序列恢复二叉树的递归思想是:先根据先序序列的第一个结点建立根结点,然后在中序序列中找到
该结点,从而划分出根节点的左、右子树的中序序列。接下来再在先序序列中确定左、右子树的先序序列,并有左子树的先序序列与
中序序列继续递归建立左子树,由右子树的先序序列与中序序列继续递归建立右子树。
为了能够将恢复的二叉树传回给主调函数,在函数Per_In_order中使用了二级指针**p.
在下面的算法中,二叉树的先序遍历序列和中序遍历序列分别存放在一维数组pred和ind中。算法如下:
*/
//2.接下来后续遍历二叉树的递归算法:
首先分析:给出先序遍历的二叉树的结果,我们知道先序是:根 左 右;中序是:左 根 右;
那么我们很容易就知道在先序遍历中可以确定二叉树的根所在的位置,其次再在中序遍历中找出根的左边和右边,这样不断的递归就会将原来的二叉树构建
出来,之后再进行后续遍历:左 右 根;
伪代码如下:
/*
思想:根据二叉树的先序序列和中序序列恢复二叉树的递归思想是:先根据先序序列的第一个结点建立根结点,然后在中序序列中找到
该结点,从而划分出根节点的左、右子树的中序序列。接下来再在先序序列中确定左、右子树的先序序列,并有左子树的先序序列与
中序序列继续递归建立左子树,由右子树的先序序列与中序序列继续递归建立右子树。
为了能够将恢复的二叉树传回给主调函数,在函数Per_In_order中使用了二级指针**p.
在下面的算法中,二叉树的先序遍历序列和中序遍历序列分别存放在一维数组pred和ind中。算法如下:
*/
<span style="font-size:18px;"> void Pre_In_order(char pred[],char ind[],int i,int j,int k,int h,BSTree **p){ //i、j和k、h分别为当前子树先序序列和中序序列的下、上界 int m; *p=(BSTree*)malloc(sizeof(BSTree));//在主调函数空间申请一个结点 (*p)->data=pred[i]; //根据pred数组生成二叉树的根结点 m=k; //m指向ind数组所存储的中序序列中第一个结点 while(ind[m]!=pred[i]) //找到根结点在中序序列所在的位置 m++; if(m==k) //根结点是中序序列的第一个结点时则无左子树 (*p)->lchild=NULL; else Pre_In_order(pred,ind,i+1,i+m-k,k,m-1,&(*p)->lchild); //根据根结点所划分出中序序列的两个部分继续构造左右子树 if(m==h) //根结点是中序序列的最后一个根结点时则无右子树 (*p)->rchild=NULL; else Pre_In_order(pred,ind,i+m-k+1,j,m+1,h,&(*p)->rchild); //根据根结点所划分出中序序列的两个部分继续构造左右两颗子树。 } </span>
//2.接下来后续遍历二叉树的递归算法:
<span style="font-size:18px;">void Postorder(BSTree *p){ if(p!=NULL){ Postorder(P->lchild); //后序遍历左子树 Postorder(P->rchild); //后序遍历右子树 printf("%3c",p->data); //访问根结点 } } </span>
相关文章推荐
- C语言内存的动态存储管理4-边界标识法http://blog.csdn.net/hbuxiaoshe/article/details/5998538
- 农历 阴历 转换阳历算法
- 浅析回调函数
- Centos 下Kafka集群的搭建
- mima接收数据时粘包和大小端问题解决方案具体实现
- AngularJs 父子级Controller传递数据
- css属性之transform
- swift中通知的使用
- Swift - 使用NSNotificationCenter发送通知,接收通知
- ios
- DB2进程hang(load 进程)收数脚本
- <div>
- qtp 怎样添加数据库检查点
- IOS开发中model的简单使用
- 学习Android从0开始之开发工具篇-Android studio详解
- Eclipse中的Maven项目报Unbound classpath variable错误
- JS核心系列:漫谈JS引擎的运行机制
- C 游戏所要看的书
- 乘积配对,找出输入数据中所有两两相乘的积为 12的个数--C++
- <php+mysql>PHP脚本条件判断,foreach循环,以及粘性表单