加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++对树进行后序遍历的代码

发布时间:2020-12-16 07:46:26 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #include stdio.h#include string.hstruct Node{ Node *lchild;// 左儿子指针 Node *rchild;// 右儿子指针 char c;//结点字符信息}Tree[50];// 静态内

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#include <stdio.h>
#include <string.h>
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;
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读