《C算法》——樹

 二叉樹 

定義
typedef struct node* link;
struct
 node 
{
    Item item;
    link l, r; 
}
;
二叉樹的先序遍歷(遞歸)
void traverse(link h, void (*visit)(link))
{
    
if(h == NULL)    return
;
    (
*
visit)(h);
    traverse(h
->
l, visit);
    traverse(h
->
r, visit);
}
二叉樹的先序遍歷(非遞歸)
void traverse(link h, void (*visit)(link))
{
    STACKinit(max);
    STACKpush(h);
    
while(!
STACKempty())
    
{
        (
*visit)(h =
 STACKpop());
        
if(h->!= NULL)    STACKpush(h->r);    //右子樹入棧

        if(h->!= NULL)    STACKpush(h->l);                         //左子樹入棧
    }

}
若將上面的棧改爲隊列,則此遍歷變爲層序遍歷
void traverse(link h, void(*visit)(link))
{
    QUEUEinit(max);
    QUEUEput(h);
    
while(!
QUEUEempty())
    
{
        (
*visit)(h =
 QUEUEget());
        
if(h->!= NULL)    QUEUEput(h->
l);
        
if(h->!= NULL)    QUEUEput(h->
r);
    }

}
樹參數的計算 計算樹的節點數(遞歸)
int count(link h)
{
    
if(h == NULL)    return 0
;
    
return count(h->l)+count(h->r)+1
;
}
計算樹的高度(遞歸)
int height(link h)
{
    
int
 u, v;
    
if(h == NULL) return -1
;
    u 
= height(h->
l);
    v 
= height(h->
r);
    
if(u > v)    return u+1
;
    
else     return v+1
;
}

發佈了24 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章