二叉树的遍历
来源:互联网 发布:软件升级包 编辑:程序博客网 时间:2024/05/21 22:33
1、前序遍历(父节点,左孩子,右孩子)。
#define N 7 //树节点个数int tree[N]={a,b,c,d,e,f,g}; //自定义节点编号void foreIterator(int root){ if(root >= N) return; printf("%d ",tree[root]); //这里可以替换成自己的处理函数 foreIterator(2*root+1); foreIterator((2*root+2));}//下面的函数省略N tree定义//调用时foreIterator(0);这里的root指数组下标,从0开始
2、中序遍历(左孩子,父节点,右孩子)。
void middIterator(int root){ if(root >= N) return; middIterator(2*root+1); printf("%d ",tree[root]); middIterator((2*root+2));}
3、后序遍历(左孩子,右孩子,父节点)。
void backIterator(int root){ if(root >= N) return; backIterator(2*root+1); backIterator((2*root+2)); printf("%d ",tree[root]);}
提醒:根据前序遍历和后序遍历结果不可以推导出原来的二叉树。根据中序遍历和其它两种任意一个都可以推导出二叉树。
1、根据中序、前序求出原来的树。
#define N 7int fore[N]={0,1,3,4,2,5,6};int midd[N]={3,1,4,0,5,2,6};int back[N]={3,4,1,5,6,2,0};int tree[N]={-1,-1,-1,-1,-1,-1,-1};//在方法内将会使用上面定义的内容,也可以使用其它方式void treeFromMF(int ms,int me,int fs,int index){ /* 参数含义: ms -> 中序数组表示的树的起点 me -> 中序数组表示的树的终点 fs -> 前序数组表示的树的起点 index -> tree数组索引 */ if(ms<0||ms>=N||me<0||me>=N||fs<0||fe>=n||index<0||index>=N) return; int i; for(i=ms; i<=me; i++) //根据前序数组将中序数组拆分为左子树右子树 if(midd[i] == fore[fs]) break; tree[index] = fore[fs]; //将父元素保存进tree treeFromFM(ms,i-1,fs+1,2*index+1); //计算左子树起终点 treeFromFM(i+1,me,fs+i-ms+1,2*index+2);//计算右子树}
2、根据中序、后序求出原来的树。
void treeFromMB(int ms,int me,int be,int index){/*参数含义:ms me index -> 同上be -> 后序数组终点*/ if(ms<0||ms>=N||me<0||me>=N||be<0||be>=N||index<0||index>=N) return; int i; for(i=ms; i<=me; i++) if(midd[i] == back[be]) break; tree[index] = back[be]; treeFromBM(ms,i-1,be+i-me-1,2*index+1); // be+i-me-1 treeFromBM(i+1,me,be-1,2*index+2);//be-me+i}
注意:两个函数的第三个参数的不同含义。
如给出的三个数组,调用treeFromMF需要传递(0,6,0,0);而调用treeFromMB需要传递(0,6,6,0)
0 0
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 制作网页---HTML小节
- 数据分析与数据挖掘
- 如何制作U盘启动盘安装Win7
- 深度学习的最新进展及诺亚方舟实验室的研究
- Spring总结0402
- 二叉树的遍历
- static 和 final 总结
- python 中 print 函数用法总结
- ListView中geiView调用的数组边界溢出问题
- php原生的增删该查
- Oracle常用语句语法汇总
- JSON in google Maps
- angularjs post /get请求及radio button
- 一、ThinkPHP的介绍