zoukankan      html  css  js  c++  java
  • 二叉树hdu1710

    学习二叉树,看了两天也不明白,唉!acm之路让我体验到要付出巨大的努力,废话不多说,看我网上找到的代码:

    此题题意很明确,给你先序遍历,中序遍历,求后序遍历。但代码就让我找不到东西了。

    http://acm.hdu.edu.cn/showproblem.php?pid=1710

    #include <stdio.h>
    #include <string.h>
    void build(int n,int *a,int *b,int *c)
    {
        int *p=b;
        if(n<=0)return;
        while(1)
        {
            if(a[0]==*p)
            break;
            else
            p++;
        }
        int x=p-b;
        build(x,a+1,b,c);
        build(n-x-1,a+x+1,b+x+1,c+x);
        c[n-1]=a[0];
    }
    int main()
    {
        int n,i;
        while(~scanf("%d",&n))
        {
            int a[1002],b[1002],c[1002];
            for(i=0;i<n;i++)
            scanf("%d",&a[i]);
            for(i=0;i<n;i++)
            scanf("%d",&b[i]);
            build(n,a,b,c);
            for(i=0;i<n-1;i++)
            {
                printf("%d ",c[i]);
            }   printf("%d
    ",c[n-1]);
        }
        return 0;
    }

    这为结构体指针的一个代码!

    #include<stdio.h>
    #include<stdlib.h>
    int a[1000],b[1000];
    int flag;
    typedef struct node
    {
        int data;
        struct node *lchild,*rchild;
    } Tnode,*Tree;
    int m=sizeof(Tnode);
    Tree newnode()
    {
        Tree p;
        p=(Tree)malloc(m);
        p->lchild=NULL;
        p->rchild=NULL;
        return p;
    }
    
    void Creat(int i,int j,int k,int t,Tree p)//此处理解甚为重要,建立过程,先自己模拟的过程如果模拟的过程理解了这里就容易许多
    {
        p->data=a[i];
        int m;
        for(m=k; m<=t; m++)
        {
            if(a[i]==b[m])
                break;
        }
        if(m==k)p->lchild=NULL;
        else
        {
            p->lchild=newnode();
            Creat(i+1,i+(m-k),k,m-1,(p->lchild));//需要理解的地方
        }
        if(m==t)p->rchild=NULL;
        else
        {
            p->rchild=newnode();
            Creat(i+(m-k)+1,j,m+1,t,(p->rchild));//此处也是需要加强理解之处
        }
    }
    void post(Tree p)
    {
        if(p!=NULL)
        {
            post(p->lchild);
            post(p->rchild);
            if(p->data!=NULL)
                if(flag==0)
                {
                    printf("%d",p->data);
                    flag=1;
                }
                else
                    printf(" %d",p->data);
        }
    }
    
    int main()
    {
        Tree root;
        int i,n;
        while(scanf("%d",&n)!=EOF)
        {
            flag=0;
            for(i=1; i<=n; i++)
                scanf("%d",&a[i]);
            for(i=1; i<=n; i++)
                scanf("%d",&b[i]);
            root=newnode();
            Creat(1,n,1,n,root);
            post(root);
            printf("
    ");
        }
        return 0;
    }

    也许以后会看得懂吧!

  • 相关阅读:
    LeetCode 334 Increasing Triplet
    LeetCode 笔记27 Two Sum III
    LeetCode 笔记28 Maximum Gap
    最小的图灵完备语言——BrainFuck
    蛋疼的SVG外部引用方式
    HackerRank# Hexagonal Grid
    HackerRank# The Longest Common Subsequence
    HackerRank# Bricks Game
    HackerRank# Fibonacci Modified
    HackerRank# Knapsack
  • 原文地址:https://www.cnblogs.com/ccccnzb/p/3352664.html
Copyright © 2011-2022 走看看