树 是一种非线性数据结构,与 **list(链表) 十分相似,因此,存储方式也与 list 大同小异,他共有四种存储方法,以下将一一介绍

注意(用于下方所有表示方法):
1.数据域中可以存放任何数据类型或数据结构(当然包括STL)
2.指针域中可以存放一个或一组指针变量,当树以数组形式存储(结构体数组)时,指针域中可以存放整形变量(或整形数组),从而“指向”数组下标来访问节点

1.父亲表示法:
父亲表示法中一个结构体节点中有一个数据域与和一个指针域,是指针指向儿子的一种表示法。指针域指向其父节点 。Ta很好地利用了 树的唯一父节点 的性质,与单向列表结构相似。

const int a=100; //树的节点总数
struct NoDe{
    int DaTa;//数据 
    int *parent1;//指向父节点的指针 
    //int parent2; 在数组中存储时,可用数字寻找下标,所以亦可用此方法 
};
NoDe tree [a];

2.儿子表示法;
儿子表示法中一个结构体节点有一个数据域和一个指针域,是指针指向儿子的一种表示法。指针域是指向当前节点所有子节点的指针数组。Ta与父亲表示法相似,都是单向链表,但是指针域的指针数量比父亲表示法多。

const int a1=100;//树的度(为避免有子节点放不下的情况,宁多勿少) 
struct  Node{
    int Data;
    int *child[a1];//以整棵树的度为标准 
    //int child[a1]; 在数组中存储也可这样定义,存储的是数组下标 
};
Node Tree [a1];

3.父亲儿子表示法:
父亲儿子不同与前面两种表示法,Ta有两个指针域,分别指向父节点(指针变量)与子节点(指针数组),是前面两表示法的综合运用,解决其相互查找不方便的弊端,其属性是一种双向链表

const int b=100 ;
struct node{
    int data;
    int *father;//每个节点只有唯一的父亲
    int *children[b];
//    int father;
//    int children[b]; 在数组中存储也可这样定义,存储的是数组下标 

}; 
node TRee[b]; 

4.儿子兄弟表示法(只有二叉树适用!!!)
该存储方式也是有两个指针域,分别指向其第一个孩子节点(当然你可以进行创新,让它指向所有子节点(毕竟只有两个...))和其兄弟节点(二叉树的兄弟节点是唯一的),数据域与上方的三种相同,不必多介绍。

const int c=100;
struct NODE{
    int data;
    int *firstchild,*brother;//下一个子节点和第一个兄弟节点 
};

//创新方法:
const int c=100;
struct NODE{
    int data;
    int *child[2],*brother;//下一个子节点和第一个兄弟节点 
};