2014-02-27 72 views
0

我想創建一個存儲有關奧運場館信息的樹型數據結構。我遇到了一個障礙,我意識到我的delete函數總是返回「找不到元素」,我的DFS將找到正確的節點,但繼續打印出樹的右側。難以讓我的刪除和DFS功能正常工作

Tree * preorder_find(char * find_city, Tree* T) 
{ 
    if(T) 
    { 

     //if(strcmp(T->Element->city, find_city) == 0) 
     //return T; 

     printf("%s, %s ... %d\n", T->Element->city, T->Element->country, 
               T->Element->year); 

     if(strcmp(T->Element->city, find_city) != 0) 
     { 
      preorder_find(find_city, T->Left); 

      preorder_find(find_city, T->Right); 
     } 

    } 


return T; 

} 



Tree* delete(char * venue, Tree* T) 
{ 
    Tree* tmp_node; 

    if(T==NULL) 
     fprintf(stderr, "Element not Found\n"); 
    else 
    if(strcmp(venue, T->Element->city) < 0) 
     T->Left = delete(venue, T->Left); 
    else 
    if(strcmp(venue, T->Element->city) > 0) 
     T->Right = delete(venue, T->Left); 
    else 
    if(T->Left && T->Right) 
    { 
     tmp_node = find_min(T->Right); 
     T->Element = tmp_node->Element; 
     T->Right = delete(T->Element->city, T->Right); 
    } 
    else 
    { 
     tmp_node = T; 
     if(T->Left == NULL) 
      T = T->Right; 
     else if(T->Right == NULL) 
      T = T->Left; 
     free(tmp_node); 
    } 

    return T; 
} 

回答

0
  1. 請試試這個preorder_find()

    樹* preorder_find(字符* find_city,樹* T) { 樹*溫度;

    if(T) 
    { 
    
        if(strcmp(T->Element->city, find_city) == 0) 
         return T; 
    
        printf("%s, %s ... %d\n", T->Element->city, T->Element->country, 
          T->Element->year); 
    
        if(strcmp(T->Element->city, find_city) != 0) 
        { 
         if ((temp = preorder_find(find_city, T->Left)) 
           || (temp = preorder_find(find_city, T->Right))) 
          return temp; 
        } 
    
    } 
    
    
    return T; 
    

    }

  2. 我刪除功能總是返回 「找不到元素」

    根據您的delete(),這意味着爭論的delete()T總是NULL