#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 100
typedef char DataType;
// 定义孩子链表结点
typedef struct CNode
{
int index;
struct CNode * next;
}CNode;
// 定义表头结点
typedef struct TNode
{
DataType data; // 数据域
struct CNode * firstchild; // 指向孩子链表的头指针
}TNode;
// 定义数组
typedef struct
{
TNode Tree[MaxSize]; // 用来存储结点的数组
int n; // 记录结点的个数
}Tree;
void Creat_Tree(Tree * T); // 创建树
void Search_Node(Tree * T, char temp); // 搜查某个数组结点以及它的孩子链表的孩子结点
int main()
{
Tree T;
Creat_Tree(&T);
Search_Node(&T, 'B');
system("\npause");
return 0;
}
void Creat_Tree(Tree * T)
{
int i,n,childnode;
printf("请输入数组结点的个数:");
scanf("%d", &(T->n));
// 逐个赋值
for(i=0; i<T->n; ++i)
{
printf("请输入第%d个数组结点的值:",i+1);
fflush(stdin); // 清空输入缓冲区
scanf("%c",&(T->Tree[i].data));
T->Tree[i].firstchild = (struct CNode*)malloc(sizeof(struct CNode));// 创建一个孩子链表的头结点,表头结点指针域保存该孩子链表头结点的地址
T->Tree[i].firstchild->next = NULL;
printf("请输入第%d个数组结点的孩子链表的结点个数:",i+1);
scanf("%d",&childnode);
int j = 0;
struct CNode * p = T->Tree[i].firstchild; // p也保存了孩子链表头结点的地址
while(j<childnode)
{
struct CNode * q = (struct CNode*)malloc(sizeof(struct CNode));
q->next = NULL;
printf("请输入第%d个数组结点的孩子链表的第%d个孩子结点的值:",i+1,j+1);
scanf("%d",&(q->index));
p->next = q;
p = p->next;
j++;
}
printf("\n");
}
}
//搜索树的某个结点以及它的孩子链表的孩子结点
void Search_Node(Tree * T, char temp)
{
int i;
int flag = 0;
for(i=0; i<T->n; ++i)
{
if(T->Tree[i].data==temp)
{
flag = 1;
printf("\n您所搜索的结点是:%c\n", T->Tree[i].data);
struct CNode * p = T->Tree[i].firstchild->next;
printf("它的孩子结点有:");
while(p)
{
printf("%2c",T->Tree[p->index].data);
p = p->next;
}
printf("\n");
break;
}
}
if(!flag)
printf("没有找到的噶!\n");
}