下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
#include
#include
struct Node{
Node *lchild;// 左儿子指针
Node *rchild;// 右儿子指针
char c;//结点字符信息
}Tree[50];// 静态内存分配数组
int loc;// 静态数组中已经分配的结点个数
Node *creat(){//申请一个结点空间,返回指向其的指针
Tree[loc].lchild=Tree[loc].rchild=NULL;//初始化左右儿子为空
return &Tree[loc++];
}
char str1[30],str2[30];// 保存前序和中序遍历字符串
//修改打印输出的位置就可以进行相应的前序和中序遍历了
void postOrder(Node *T){
if(T->lchild!=NULL){
postOrder(T->lchild);
}
if(T->rchild!=NULL){
postOrder(T->rchild);
}
printf("%c",T->c);// 遍历该结点,输出字符信息
}
Node *build(int s1,int e1,int s2,int e2){
Node* ret=creat();
ret->c=str1[s1];//该结点字符为前序遍历中的第一个字符
int rootIdx;
for(int i=s2;i<=e2;i++){
if(str2[i]==str1[s1]){
rootIdx=i;
break;
}
}
if(rootIdx!=s2){
ret->lchild=build(s1+1,s1+(rootIdx-s2),s2,rootIdx-1);//递归还原其左子树
}
if(rootIdx!=e2){
ret->rchild=build(s1+(rootIdx-s2)+1,e1,rootIdx+1,e2);//递归还原其右子树
}
return ret;
}
int main(){
freopen("in.txt","r",stdin);
while(scanf("%s",str1)!=EOF){
scanf("%s",str2);//输入
loc=0;// 初始化静态内存空间中已经使用结点个数为0
int L1=strlen(str1);
int L2=strlen(str2);
Node *T=build(0,L1-1,L2-1);
postOrder(T);//后序遍历
printf("n");
}
return 0;
}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
总结
以上是编程之家为你收集整理的C++对树进行后序遍历的代码全部内容,希望文章能够帮你解决C++对树进行后序遍历的代码所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!