2014-12-05 77 views
1

我想在Java中练习二叉树,并试图写一个“isPresent”函数。但是,如果参数(testInt)不是根节点值,则该函数不起作用。它正在进入一个无限循环。我很确定我错过了一些愚蠢的事情。返回语句不返回控制给调用者在java

public class Node { 
    // Attributes 
    int value; 
    Node leftChild; 
    Node rightChild; 

    // Constructor 
    Node (int value) { 
     this.value = value; 
    } 

    // Getter 
    int getValue() { 
     return value; 
    } 

    boolean isPresent(int testInt) { 
     Node presentNode = this; 
     while (presentNode != null) { 
      if (presentNode.getValue() == testInt) { 
       return true; 
      } else if (testInt < presentNode.getValue()) { 
       presentNode.leftChild.isPresent(testInt); 
      } else { 
       presentNode.rightChild.isPresent(testInt); 
      } 
     } 
     return false; 
    } 
} 

public static void main(String args[]) { 
    int[] integers = new int[size]; 
    Arrays.sort(integers); 
    Node binarySearchTree = createBSTFromSortedArray(integers, 0, size - 1); 
    if (binarySearchTree.isPresent(testInt)) { 
     System.out.println("Yes"); 
    } else { 
     System.out.println("No"); 
    } 
    in.close(); 
} 

private static Node createBSTFromSortedArray(int[] integers, int start, int end) { 
    if (end < start) { 
     return null; 
    } 
    int mid = (start + end)/2; 
    Node binarySearchTree = new Node(integers[mid]); 
    binarySearchTree.leftChild = createBSTFromSortedArray(integers, start, mid - 1); 
    binarySearchTree.rightChild = createBSTFromSortedArray(integers, mid + 1, end); 
    return binarySearchTree; 
} 

回答

0

在你isPresent方法,被您忽略的呼吁leftright儿童isPresent的结果。根据情况将leftright孩子指定为presentNode

变化

} else if (testInt < presentNode.getValue()) { 
    presentNode.leftChild.isPresent(testInt); 
} else { 
    presentNode.rightChild.isPresent(testInt); 
} 

} else if (testInt < presentNode.getValue()) { 
    presentNode = presentNode.leftChild; 
} else { 
    presentNode = presentNode.rightChild; 
} 
+0

哇,这工作。非常感谢。不能相信我错过了!你为我节省了很多时间。 – 2014-12-06 02:29:08