一、树的存储结构
双亲表示法
#define MaxSize 100
typedef char DataType;
typedef struct
{
DataType data;
int parent;
}PNode;
typedef struct
{
PNode tree[ MaxSize];
int treeNum;
}PTree;
孩子表示法
typedef char DataType;
typedef struct ChildNode
{
int child;
struct ChildNode *next}
ChildNode;
typedef struct
{ataType data;
ChildNode *first;}
TreeNode;
#define MaxSize 100typedef struct
{
TreeNode tree[Maxsize];
int treeNum;
}CTree;
二叉链表(孩子兄弟表示法
typedef char DataType;
typedef struct CSNode
{
DataType data;
struct CSNode *firstchild, *rightsib;
}CSNode;
CSNode *root;
二、二叉树的存储结构
顺序存储结构
#define MaxSize 100
typedef char DataType;
typedef struct
{
DataType data[MaxSize;
int biTreeNum;
}SeqBiTree;
二叉链表存储
typedef char DataType;
typedef struct BiNode
{
DataType data;
struct BiNode *lchild, *rchild;
}BiNode;
BiNode *root;
前,中,后序遍历
层序遍历(上下左右
void LeverOrder(BiNode *root)
BiNode*q=NULL,*Q[MaxSize];/*采用顺序队列*/
.int front = rear = -1;/*初始化顺序队列*/
if (root ==NULL) return;/*二叉树为空,算法结束*/
Q[++rear] =root;/*根指针入队*/
while (front != rear)/*当队列非空时*/
{
q=Q[++front];/*出队*/
printf("%c ", q->data);/*访问结点,为char型*/
if (q->lchild != NULL) Q[++rear]=q->lchild;
if(q->rchild != NULL) Q[++rear]=q->rchild;
}
建立二叉树
BiNode * CreatBiTree(BiNode *root){
char ch;cin >>ch;/*输入结点的数据信息*
if(ch —= '#') root= NULL;/*递归结束,建立一棵空树*/
else {
root = (BiNode *)malloc(sizeof(BiNode));root->data = ch;
root->lchild = CreatBiTree (root->lchild);/*递归建立左子树*/
root->rchild =CreatBiTree (root->rchild);/*递归建立右子树*/
}
return root;}
销毁二叉树
void DestroyBiTree(BiNode *root)1
if (root == NULL) return;else{
DestroyBiTree(root->lchild);
DestroyBiTree(root->rchild);
free(root);
}
}
三、最优二叉树
哈夫曼树的存储
typedef struct
{
int weight;/*假定权值为整数*/
int parent, lchild, rchild;
}ElemType;
哈夫曼算法
void HuffimanTree(element huffTree[ ], int w[ ], int n){
int i, k,i1, i2;
for (i =0; i<2*n-1; i++)
/*初始化,所有结点均没有双亲和孩子*/
{
huffTree[i].parent=-1; huffTree[i].lchild =-1; huffTree[i].rchild =—1;}
for (i= 0; i<n; i++)
/*构造n棵只含有根结点的二叉树*/
huffTree[i].weight= w[i;
for (k = n; k<2*n-1;k++)/*n-1次合并*/
{
Select(huffTree,i1, i2);/*权值最小的两个根结点下标为il和i2*/
huffTree[k].weight = huffTree[il].weight + huffTree[i2].weight;
huffTree[i1].parent = k; huffTree[i2].parent= k;
huffTree[k ].lchild =il; huffTree[k].rchild = i2;}
}