2011-12-23 15 views
9

Chcę wyszukać element w drzewie niebinarnym (dowolny węzeł może mieć n-dzieci) i natychmiast wyjść z rekursji. Węzłem, o którym mowa, może być dowolny węzeł, a nie tylko liście.Rekursywne wyszukiwanie węzła w niebinarnym drzewie

To jest mój kod, ale nie otrzymuję pełnego wyszukiwania.

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 zawiera:

ArrayList mChildren ; (to dzieci) obiektu
i danych.

+0

co robi 'nNode' wyglądać? – fge

Odpowiedz

23

Nie powinieneś wychodzić po zbadaniu pierwszego dziecka. Nie potrzebujesz instrukcji if przed pętlą 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

W kodzie jeśli recursiveSearch (GI, dzieci [i]) powrócił zerowy Potem + 1 nie szukał, modyfikować:

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; 
} 
Powiązane problemy