回 帖 发 新 帖 刷新版面

主题:树储存结构实现疑问

各位,请问树储存结构里面的双亲表示法,是不是像这样实现:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define max 20
typedef struct ptnode
{
  char data;
  int parent;
}ptnode;

typedef struct ptree
{
    ptnode nodes[max];
    int n;
}ptree;

create(ptree *ptr)
{
   char ch;
   int i=0;
   printf("input the number nodes:");
   scanf("%d",&ptr->n);fflush(stdin);
   while(i<ptr->n)
     {
       if(i==0)
          {
            printf("Input the node:");
            scanf("%c",&ptr->nodes[i].data);
            fflush(stdin);
            ptr->nodes[i].parent=-1;
            i++;
         }
        else
           { printf("Input the node:");
             scanf("%c",&ptr->nodes[i].data);
             fflush(stdin);
             printf("Input the parent:");
             scanf("%d",&ptr->nodes[i].parent);
             fflush(stdin);
             i++;
           }
     }
}
main()
{
    ptree *p;
    int i,j;
    p=(struct ptree *) malloc (sizeof(struct ptree));
    create(p);
    for(i=0;i<p->n;i++)
     {
        printf("\n%d %c %d\n",i,p->nodes[i].data,p->nodes[i].parent);
     }
}
我感觉似乎这样实现效率太低,每个节点的双亲值都是手工输入的,怎样才能改进一下?

回复列表 (共5个回复)

沙发

不手工输入就只有在程序里给它们赋值啊.

板凳

对于没有规律的双亲表示法树的创建,似乎真的没有更好的办法了。无论从键盘读入还是
从文件读入最初都要手动输入。

3 楼

即使从数据库读入,初始的时候还是要建立数据库中表的数据。

4 楼

不知道我这样实现的是不是就是树的双亲存储呢?
还有没有其它更好的双亲存储的写法,肯请大家指教!

5 楼

有没有类似二叉树的那种递归实现?

我来回复

您尚未登录,请登录后再回复。点此登录或注册