树与二叉树

二叉树性质

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=所有叶子节点带权路径长度

 构造哈夫曼树

 哈夫曼树构造算法

 

 

 

 哈夫曼树的应用(编码)

 

 算法实现

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值