2013-04-18 63 views
0

你好,我遇到了一個我似乎無法解決的問題。我有一個BST,我正在遍歷並檢查行列。我有一個方法checkRank(link head, targRank),它接收頭節點並遍歷樹,直到找到與targRank具有相同級別的節點。我試圖做的是有checkRank函數返回當前節點它發現相同的排名在。什麼是最好的方法來實現這一點,因爲我所有的嘗試似乎都返回當前節點作爲頭部?從BST返回當前節點

typedef struct node* link; 

struct node 
{ 
    Item item; // Data for this node 
    link l, r; // left & right links 
    int rank; 
}; 

Func鍵呼叫:

link head; 
checkRank(head, 13); 

FUNC:

所有的
link checkRank(link h,int targetRank) 
{ 
    if (h != NULL) 
    { 
     if (h->rank < targRank) 
     { 
      checkRank(h->r, targRank); 
     } 


    if (h->rank > tarRank) 
     { 
      checkRank(h->l, targtRank); 
     } 

     if (h->rank == targRank) 
     { 
      return ??; 
     } 
    } 
    else 
    { 
     printf("Equiv rank could not be found\n"); 
    } 
} 

回答

1

首先,你需要的東西return沿每條路徑。你有沒有考慮過類似如下:

link check_rank(link h, int target) { 
    if (h == NULL) { 
    printf("equivalent rank could not be found\n"); 
    return NULL; 
    } 
    if (h->rank < target) 
    return check_rank(h->r, target); 
    if (h->rank > target) 
    return check_rank(h->l, target); 
    return h; 
} 

職能必須始終返回一個值,許多遞歸函數將按照(1)返回一個定點模式,停止遞歸當適當的條件被滿足(2)遞歸併返回遞歸調用返回的內容。

+0

是的工作。非常感謝你。 – bardockyo