三种建树方法

Posted foodie-nils

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种建树方法相关的知识,希望对你有一定的参考价值。

前序中序序列建立二叉树:

//in[]和pre[]数组存放二叉树的中序和前序遍历序列
node* build(int preL,int preR,int inL,int inR){
    if(preL>preR)
        return NULL;
    node* root=(node*)malloc(sizeof(node));
    int val=pre[preL];
    root->val=val;
    int x;
    for(int i=inL;i<=inR;i++){
        if(in[i]==val){
            x=i;
            break;
        }
    }
    x=x-inL;
    root->l=build(preL+1,preL+x,inL,inL+x-1);
    root->r=build(preL+1+x,preR,inL+x+1,inR);
    return root;
}

 后序中序序列建立二叉树:

//in[]和post[]数组存放二叉树的中序和后序遍历序列
node* build(int postL,int postR,int inL,int inR){
    if(inL>inR)
        return NULL;
    node* root=(node*)malloc(sizeof(node));
    root->val=post[postR];
    int x;
    for(int i=inL;i<=inR;i++){
        if(in[i]==root->val){
            x=i;
            break;
        }
    }
    x=x-inL;    //x表示左子树结点的个数 
    root->l=build(postL,postL+x-1,inL,inL+x-1);
    root->r=build(postL+x,postR-1,inL+x+1,inR);
    return root;
}

 

以上是关于三种建树方法的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 有用的代码片段和 trick

机器学习基础xgboost系列丨xgboost建树过程分析及代码实现

在java中创建树数据结构?

二叉树之建树

多序列比对&建树

Linux 添加开机启动项的三种方法