| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4232 人关注过本帖
标题:求教关于树创建的问题
只看楼主 加入收藏
qq1625127317
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:185
专家分:450
注 册:2015-9-3
结帖率:83.33%
收藏
 问题点数:0 回复次数:1 
求教关于树创建的问题
就是求问普通树的创建方法,我是新手,在学习的过程中发现树这一章的程序例子都是在基于树已经创建好了的情况下,但是我树的创建还不会。这怎么能明白呢?就是求问一下
  哪一位前辈能随便给一个实例呢。。。让我好好参详一下
2016-05-19 13:30
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
树。。。说白了也就是单向链的升级版。
在结构体里面除了存放数据以外还有指向另外多个元素的指针。
常见的树一般都建成了二叉树的结构,因为所有树都可以转化成二叉树。至于为什么,你可以自行找些视频/书籍/博客之类的看看

我贴一个我做过的题目的代码。原题来自PTA,代码作用就是判断两颗二叉树是不是一样的。
程序代码:
#include <stdlib.h>
#include <stdio.h>
/*评测结果
时间    结果    得分    题目    编译器    用时(ms)    内存(MB)    用户
2016-02-10 20:51    部分正确    23    5-3    gcc    1    1    569985011
测试点结果
测试点    结果    得分/满分    用时(ms)    内存(MB)
测试点1    答案正确    7/7            1        1
测试点2    答案正确    7/7            1        1
测试点3    答案正确    3/3            14        1
测试点4    答案正确    2/2            25        1*输入为0 0,空树和空树是同构

测试点5    答案正确    3/3            1        1
测试点6    答案正确    3/3            1        1
2016-03-12 23:55    答案正确      25    03-树1  gcc  13  1  569985011 


 

测试点结果


  

测试点  结果    得分/满分用时(ms)内存(MB)要点提示
测试点1 答案正确   7/7    1  1   sample 1 有双边换、单边换,节点编号不同但数据同  

测试点2 答案正确   7/7    1  1   sample 2 第3层开始错,每层结点数据对,但父结点不对  

测试点3 答案正确   3/3    1  1   结点数不同  

测试点4 答案正确   2/2    1  1   空树  

测试点5 答案正确   3/3    13 1   只有1个结点,结构同但数据不同  

测试点6 答案正确   3/3    1  1   最大N,层序遍历结果相同,但树不同


*/
typedef struct TNode{
int left;int right;
char data;   

}*BTree;


int char2int(char);
BTree ReadT(int);
int FindT(char,BTree,int);
int CompareT(BTree ,int,BTree ,int);

int main(){
    int n;scanf("%d",&n);

  BTree a=ReadT(n);
  int m;scanf("%d",&m);
  BTree b=ReadT(m);
  if(m!=n){printf("No\n");/*printf("1");*/
  }else{int flag=1;
  for(int i=0;i<n;i++){/*printf("*");*/
      int t=FindT(a[i].data,b,m);if(t==-1){flag=0;break;/**/ }
      flag=(CompareT(a,a[i].left,b,b[t].left)||CompareT(a,a[i].left,b,b[t].right));if(!flag){/*printf("4");*/break;
      }
      flag=(CompareT(a,a[i].right,b,b[t].left)||CompareT(a,a[i].right,b,b[t].right));if(!flag){/*printf("3");*/
      break;}
  }
  if(flag)printf("Yes\n");else printf("No\n");
  }

 

return 0;
}
int CompareT(BTree a,int i,BTree b,int j){
    if(i==-1||j==-1)if(i==j)return 1;else return 0;
   

    if(a[i].data!=b[j].data)return 0;else return 1;   

}
int char2int(char c){
    if(c>='0'&&c<='9')return c-'0';
    return -1;
}
int FindT(char c,BTree h,int Size){
    for(int i=0;i<Size;i++){
        if(h[i].data==c)return i;
    }
    return -1;
}
BTree ReadT(int num){
        BTree c=(BTree )malloc(sizeof(struct TNode)*num);   

            char left,right;
    for(int i=0;i<num;i++){

        scanf(" %C %c %c",&c[i].data,&left,&right);
        c[i].left=char2int(left);
        c[i].right=char2int(right);
//        printf("%c-%d-%d\n",c[i].data,c[i].left,c[i].right);

    }
    return c;
}


φ(゜▽゜*)♪
2016-06-27 23:09
快速回复:求教关于树创建的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015428 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved