二叉树性质
1.
2.
3.
4.
5.
二叉树的存储结构
1.顺序存储结构
2.链式存储结构
遍历方法
先序遍历
算法
status preordertraverse(bitree T)
{
if(T==NULL)
return OK;
else{
visit(T);
preordertraverse(T->lchild);
preordertraverse(T->rchild);
}
}
中序遍历
算法
status preordertraverse(bitree T)
{
if(T==NULL)
return OK;
else{
preordertraverse(T->lchild);
visit(T);
preordertraverse(T->rchild);
}
}
后序遍历
算法
status preordertraverse(bitree T)
{
if(T==NULL)
return OK;
else{
preordertraverse(T->lchild);
preordertraverse(T->rchild);
visit(T);
}
}
不用递归用栈
层次遍历
typedef struct{
BTnode data[MAXSIZE];
int front,rear;
}SqQueue;
Void levelorder(BTnode*b){
BTnode*p;
SqQueue*qu;
IniQueue(qu);//初始化
enQueue(qu,b);//根节点入队
while(!QueueEmpty(qu)){
deQueue(qu,p);// 出队节点p
printf("%c",p->data);
if(p->lchild1==NULL) enQueue(qu,p->lchild);
if(p->rchild1==NULL) enQueue(qu,p->rchild);
}
}
二叉树的建立
复制二叉树
void copy(bitree t,bitree &newt){
if(t==NULL){
newt=NULL;
return 0;
}
else{
newt=new bitnode;
newt->data=t->data;
copy(t->lchild,newt->lchild);
copy(t->rchild,newt->rchild);
}
}
计算二叉树的深度
int depth(bitree t){
if(t==NULL) return 0;
else{
m=depth(t->lchild);
n=depth(t->rchild);
if(m>n)return (m+1);
else return (n+1);
}
}
计算二叉树结点个数
int nodecount(bitree t){
if(t==NULL) return 0;
else{
return nodecount(t->lchild)+nodecount(t->rchild)+1;
}
}
计算叶子节点数
线索二叉树
树的存储结构之双亲表示法(找双亲容易,找孩子难)
树的存储结构之孩子链表(找孩子容易,找双亲难)
树的存储结构之孩子双亲表示法(找孩子容易 ,找双亲难)
树变二叉树
二叉树变树
森林变二叉树
二叉树变森林
哈夫曼树的定义
WPL=所有叶子节点带权路径长度
构造哈夫曼树
哈夫曼树构造算法
哈夫曼树的应用(编码)
算法实现