二叉树的遍历分为以下三种:
- 先序遍历:遍历顺序规则为【根左右】
- 中序遍历:遍历顺序规则为【左根右】
- 后序遍历:遍历顺序规则为【左右根】
什么是【根左右】就是先遍历根,再遍历左节点,最后遍历右节点。
举例来说:
- 先序遍历:ABCDEFGHK
- 中序遍历:BDCAEHGKF
- 后序遍历:DCBHKGFEA
在转换过程中要注意:
先序遍历根节点在首项
中序遍历根节点在中间
后序遍历根节点在最后
因此在递归过程中根据中序根节点划分成两个部分。
C++代码:
#include <iostream>
using namespace std;
void ToPost(char *inOrder, char *preOrder, int length){
if(length<=0)return;
int root;
for(root=0;root<length;root++){
if(inOrder[root]==preOrder[0])break;
}
ToPost(inOrder,preOrder+1,root);
ToPost(inOrder+root+1,preOrder+root+1,length-root-1);
cout<<preOrder[0];
}
void ToPre(char *inOrder, char *postOrder, int length){
if(length<=0)return;
int root;
for(root=0;root<length;root++){
if(inOrder[root]==postOrder[length-1])break;
}
cout<<postOrder[length-1];
ToPre(inOrder,postOrder,root);
ToPre(inOrder+root+1,postOrder+root,length-root-1);
}
int main()
{
char pre[]="ABDECFG";
char in[]="DBEAFCG";
char post[]="DEBFGCA";
cout<<"原始序列:\n";
cout<<"Pre:"<<pre<<endl
<<"In:"<<in<<endl
<<"Post:"<<post<<endl;
cout<<"后序遍历:\n";
ToPost(in,pre,8);
cout<<endl;
cout<<"前序遍历:\n";
ToPre(in,post,8);
cout<<endl;
return 0;
}
更多内容访问omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2019 • OmegaXYZ-版权所有 转载请注明出处