树复杂,都是转为完全二叉树进行存储,二叉树的存储分为顺序存储结构和链式存储结构。但是顺序存储结构仅仅适用于完全二叉树。因此选用链式存储结构存储二叉树。
链式存储分为1.二叉链表示法 2.三叉链表示法 3.双亲链表示法。
/*
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
};*/
//第一种表示方法 :二叉链表示法
struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
};
typedef struct BiTNode BiTNode;
typedef struct BiTNode* BITree;
//第二种表示方法:三叉链表示法(不常用)
typedef struct TriTNode
{
int data;
struct TriTNode *lchild,*rchild;
struct TriTNode*parent;
}TriTNode,*TriTree;
//第三种表示方法:双亲链表
#define MAX_TREE_SIZE 100
typedef struct BPTNode
{
int data;
int parentPosition;//指向双亲的指针 数组下表
char LRTag;//左右孩子标志域
}BPTNode;
typedef struct BPTree
{
BPTNode nodes[100];//因为结点之间是分散的 需要把结点存储到数组中
int num_node;//结点的数目
int root;//根节点的位置 根节点在数组中的下标
}BPTree;