2011-12-23 5 views
9

Tôi muốn tìm kiếm một mục trong cây không phải nhị phân (bất kỳ nút nào có thể có n - con) và thoát khỏi đệ quy ngay lập tức. Nút được đề cập có thể là bất kỳ nút nào, không chỉ các nút.Tìm kiếm đệ quy cho một nút trong cây không phải nhị phân

Đây là mã của tôi nhưng tôi không tìm kiếm đầy đủ.

private nNode recursiveSearch(data gi,nNode node){ 
     if (node.getdata()==gi) 
      return node; 
     nNode[] children = node.getChildren(); 
     if (children.length>0) 
     for (int i = 0; i < children.length; i++) {   
      return recursiveSearch(gi, children[i]); 
     } 
     return null; 
} 

nNode chứa:

ArrayList mChildren ; (trẻ em nó) đối tượng
và dữ liệu.

+0

gì bạn 'nNode' trông như thế nào? – fge

Trả lời

23

Bạn không nên thoát sau khi khám phá đứa trẻ đầu tiên. Bạn không cần câu lệnh if trước vòng lặp for.

private nNode recursiveSearch(data gi,nNode node){ 
    if (node.getdata()==gi) 
     return node; 
    nNode[] children = node.getChildren(); 
    nNode res = null; 
    for (int i = 0; res == null && i < children.length; i++) {   
     res = recursiveSearch(gi, children[i]); 
    } 
    return res; 
} 
5

Trong mã của bạn nếu recursiveSearch (gi, trẻ em [i]) trở null thì i + 1 không tìm kiếm, sửa đổi:

private nNode recursiveSearch(data gi,nNode node){ 
     if (node.getdata()==gi) 
      return node; 
     nNode[] children = node.getChildren(); 
     nNode temp; 
     if (children.length>0) 
     for (int i = 0; i < children.length; i++) {   
      temp = recursiveSearch(gi, children[i]); 
      if(temp!=null) 
       return temp; 
     } 
     return null; 
}