69,322
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
const char* playlist[256] = {"111","222","333","44"};
typedef struct node
{
char name[256];
int playtype;
int ucValid;
int sonsize;
struct node* son[12];
struct node* parent;
};
struct node* create(struct node* item)
{
item = (struct node*)malloc(sizeof(struct node));
memset(item,0,sizeof(struct node));
return item;
}
struct node* p_node;
static int num=0;
//删除一个节点
void delete(struct node* item)
{
int i;
//struct node* tmp;
//tmp = create(tmp);
//sprintf(tmp->name,"p_node%d",num++);
//p_node = tmp;
//tmp = item;
for(i=0;i<item->sonsize;i++)
{
delete(item->son[i]);
}
free(item);
item= NULL;
}
void displaynode(struct node* item)
{
printf("============display node info=========\n");
printf("node name : %s\nnode parent :%d\nnode sonsize :%d\n",
item->name,item->parent,item->sonsize);
}
void displaytree(struct node* item)
{
int i;
if(item == NULL)
{
return;
}
for(i=0;i<item->sonsize;i++)
{
if(item->son[i] == NULL)
continue;
printf("--%s addr:0x%x\n",item->son[i]->name,item->son[i]);
if(item->son[i]->sonsize > 0)
{
printf("subnode\n");
displaytree(item->son[i]);
printf("endofsubnode\n");
}
}
}
void move(struct node* parent,struct node* item)
{
int i;
int tmp;
tmp = 0;
parent->son[parent->sonsize++] = item;
item->parent = parent;
//更新parent的ucValid信息
for(i=0;i<parent->sonsize;i++)
{
tmp |= parent->son[i]->ucValid;
}
parent->ucValid = tmp;
}
struct node* buildtree(struct node* root)
{
int i;
struct node* item;
if(root == NULL)
{
printf("error! root is null\n");
}
//创建一级菜单
for(i=0;i<4;i++)
{
item = create(item);
//给name赋值
strcpy(item->name,playlist[i]);
move(root,item);
}
return root;
}
void buildtreeitem(struct node* root)
{
int i;
struct node* item;
//测试代码
for(i=0;i<7;i++)
{
item = create(item);
sprintf(item->name,"item%d",i);
item->playtype = i;
item->ucValid = i%2;
move(root->son[0],item);
}
}
int main(int argc,char** argv)
{
printf("sizeof node :%d\n",sizeof(struct node));
struct node* root;
root = NULL;
root = create(root);
strcat(root->name,"root");
buildtree(root);
buildtreeitem(root);
displaynode(root);
displaytree(root);
//释放
delete(root);
printf("root name :%s\n",root->name);
displaytree(root);
return 0;
}
//删除一个节点
void delete(struct node** item)
{
int i;
for(i=0;i<(*item)->sonsize;i++)
{
delete(&(*item)->son[i]);
}
free(*item);
*item= NULL;
}