2013-09-18 8 views
0

Я учусь кодировать его обход дерева двоичного дерева. До сих пор я придумал это из многих учебных пособий в сети. Однако, когда я пытаюсь сделать любой обход, я бегу в бесконечный цикл. Где я иду не так?Последовательный обход двоичного дерева

class Node { 
int value; 
String name; 

Node lchild = null; 
Node rchild = null; 

Node(int key, String name) { 
    this.value = key; 
    this.name = name; 
    } 
} 

public class genTrees { 

Node root; 

public void addNode(int key, String s) { 
    Node newnode = new Node(key, s); 
    if (root == null) { 
     System.out.println("Added Root"); 
     root = newnode; 
    } else { 
     Node focusNode = root; 
     Node parent; 
     while (true) { 
      parent = focusNode; 
      if (key <= focusNode.value) { 
       focusNode = focusNode.lchild; 
       if (focusNode == null) { 
        System.out.println("Added on Left" + key); 
        parent.lchild = newnode; 
        return; // All done 
       } 
      } 
      if (key > focusNode.value) { 
       focusNode = focusNode.rchild; 
       if (focusNode == null) { 
        System.out.println("Added on Right" + key); 
        parent.rchild = newnode; 
        return; 
       } 
      } 
     } 
    } 
} 

void inOrder(Node n) { 
    while (n != null) { 
     inOrder(n.lchild); 
     System.out.println(n); 
     inOrder(n.rchild); 
    } 
} 

Спасибо!

+0

Я звоню ему с Treeobj.inOrder (TreeObj.root); –

ответ

3

Следующий цикл:

while (n != null) { 
    inOrder(n.lchild); 
    System.out.println(n); 
    inOrder(n.rchild); 
} 

будет работать вечно, если n == null. И будет продолжать называть рекурсивный метод на каждой итерации. Возможно, вы должны поменять его на:

if (n != null) { 
    inOrder(n.lchild); 
    System.out.println(n); 
    inOrder(n.rchild); 
} 
+0

Ahh. Благодаря! Застрял с утра! Спасибо-спасибо! –

+0

@PR Добро пожаловать :) –

Смежные вопросы