数据结构-数

树的存储结构:

  1. 双亲表示法
  2. 孩子表示法
  3. 孩子兄弟表示法

双亲表示法:

双亲表示法中,在每个结点中,附设一个指示器指示其双亲结点到链表中的位置。

双亲表示法的结构定义:

 

#define MAX_TREE_SIZE 100

typedef int TElemType;

typedef struct PTNode {
	TElemType data;
	int parent;
} PTNode;

typedef struct   {
	 PTNode nodes[MAX_TREE_SIZE];
	 int r,n; /*root position and point*/
} PTree;

 

孩子兄弟表示法:

原理:任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟结点如果存在也是唯一的。

结构定义

 

#define TElemType int

typedef struct CSNode {
	TElemType data;
	struct CSNode *Firstchild, *NextSibling;
} CSNode, *CSTree;

孩子表示法:

把每个结点的孩子结点排列起来,以单链表作为存储结构。则n个结点有n个孩子链表,如果是叶子结点,则这个单链表为空。然后n个头指针双组成一个线性表,采用顺序存储结构,存放在一个一唯数组中。

结构定义:

#define MAX_TREE_SIZE 100

/*孩子结点*/
typedef struct CTNode {
    int child;
    struct CTNode *next;
} *childPtr;

/*表头结构*/
typedef struct {
    TElemType data;
    ChildPtr firstchild;
} CTBox;

/*树结构*/ 
typedef struct {
    CTBox nodes[MAX_TREE_SIZE];
    int r,n;
}