树的一些操作,杂记

树的一些操作,杂记


//新建结点数据类型 

typedef struct{

    typename data;
    node* lchild;
    node* rchild;



}Node;


//新建树结点 

Node* new_node(int v)
{
    Node* node=new Node;
    node->data=v;
    node->lchild=node->rchild=NULL;

    return node;




}

//查找并修改数据 

void search(Node* root,int x,int  newdata)
{
    if(root==NULL)
    {
        return; //空树,死胡同 

    }

    if(root->data==x)
    {

        root->data=newdata;

    }

    search(root->lchild,x,newdata);
    search(root->rchild,x,newdata);




}

//插入数据 


void  insert(Node* &root,int x)
{
    if(root==NULL)
    {
        root= new_node(x);

        return;     //空树,也就是查找失败,也就是插入位置 

    }


    if(由二叉树的性质,x应该插在左子树)
    {

        insert(root->lchild,x);

    }
    else
    {
        insert(root->rchild,x);


    }




}

//建树 

Node* create(int data[],int n)
{
    Node* root=NULL;

    for(int i=0;i<n;i++) 
    {
        insert(root,data[i]);


    }
    return root;


}

//前序遍历 

void preorder(Node* root)
{
    if(root==NULL)
    {
        return;

    }

    printf("%d",root->data);

    preorder(root->lchild);
    preorder(root->rchild);



}


//层序遍历 

void layerorder(Node* root)
{
    queue<Node*> queue;

    queue.push(root);

    while(!queue.empty())
    {
        Node* now=queue.front();
        queue.pop();


        printf("%d",now->data);


        if(now->lchild!=NULL)
        {
            queue.push(now->lchild);

        }

        if(now->rchild!=NULL)
        {

            queue.push(now->rchild);

        }





    }






}



//加入 层 的树结点。 

struct ndoe{

    int data;   //数据域 
    int layer;  //层次
    node* lchild;
    node* rchild; 


};



//新的层序遍历 

void layerorder(Node* root)
{

    queue<Node*> queue;

    root->layer=1;

    queue.push(root);

    while(!queue.empty())
    {
        Node* now=queue.front();

        queue.pop();

        printf("%d",now->data);

        if(now->lchild!=NULL)
        {

            now->lchild->layer=now->layer+1;
            queue.push(now->lchild);

        }

        if(now->rchild!=NULL)
        {

            now->rchild->layer=now->layer+1;

            queue.push(now->rchild);

        }





    }








}




//已知当前 先序序列 和 中序序列, 返回树的根结点地址。

Node* create(int preL,int preR,int inL,int inR)
{
    if(preL>preR)
    {

        return NULL;

    }

    Node* root=new Node;        //新建一个新的结点,用来保存二叉树的根结点

    root->data=pre[preL];   //新结点的数据域为根结点的值 

    int k;

    //在中序序列中找到in[k] == pre[L]的结点 


    for(k=inL;k<=inR;k++) 
    {
        if(in[k] == pre[preL] )
        {
            break;

        }

    }

    //左子树的结点个数 
    int num_left = k-inL;

    root->lchild=create(prL+1,preL+num_left,inL,k-1);

    root->rchild=create(preL+num_left+1,preR,k+1,inR); 





}



全部评论

相关推荐

09-16 14:43
已编辑
江娱互动_研发_客户端开发
背景&nbsp;双一流本硕&nbsp;双非大圆满&nbsp;只找游戏开发相关的岗位。&nbsp;8&nbsp;月初开始秋招到现在&nbsp;投了四五十家吧,&nbsp;目前两&nbsp;offer,&nbsp;不打算继续投了,把剩下的流程走完就开始沉淀了。目前两&nbsp;offer&nbsp;一个是网易互娱测开&nbsp;base&nbsp;广州,一个是江娱互动客户端开发&nbsp;base&nbsp;北京。应该确定网易这个了,说实话北京这个我挺想去的,这家的产品和工作氛围我了解了也不错,是那种踏实做事的,可惜我是广东人。网易的测开是调剂的二志愿,看了下有内部转岗机会,所以打算后面找个时间提前实习,沉淀下再做一个&nbsp;demo&nbsp;作品,写一些&nbsp;shader,增强下图形学渲染的能力,再学点编辑器开发。看到时候内部转岗或者春招继续投客户端开发这样。后面还能再动摇的话应该就灵犀或者腾子了吧(假如这两家确认的是客户端开发岗的话)。-----------------------补下timeline网易互娱&nbsp;测开&nbsp;8.2笔试&nbsp;&nbsp;8.21&nbsp;技术面&nbsp;&nbsp;8.29&nbsp;leader&amp;HRBP面(终面)&nbsp;9.8&nbsp;录用审核(之前一直显示面试中)9.14&nbsp;oc江娱互动&nbsp;客户端开发&nbsp;8.29主程面&nbsp;9.3&nbsp;制作人面&nbsp;9.5&nbsp;BOSS面&nbsp;9.11&nbsp;口头OC&nbsp;9.15&nbsp;正式offer后面考虑了一下&nbsp;&nbsp;感觉还是能走开发就开发吧,测开不太感兴趣,要内部活水转岗还要满1年才能申请。。
点赞 评论 收藏
分享
notbeentak...:真的nc,算毕业6月份,要给这种b公司打半年多白工😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务