2013-04-11 35 views
1

请在下面找到一个简单的二叉搜索树检查代码:我应该多长时间在二叉树中添加条目?

class Tree { 

    int value; 
    Tree left; 
    Tree right; 

    public Tree (int a){ 

     value = a; 
     left = right = null; 
     } 

} 



public class VerifyBST { 



public static boolean ifBST(Tree myTree, int small , int large){ 

     if(myTree == null) 
      return true; 
     if(myTree.value > small && myTree.value < large){ 

     boolean leftBST = ifBST(myTree.left, small,myTree.value); 
     boolean rightBST = ifBST(myTree.right,myTree.value,large); 

     return leftBST&&rightBST; 
     } 
     else{ 

     return false; 
     } 

    } 

    public static void main(String[] args) { 
     /* 

       4 
      /\ 
       2 6  
      /\ /\ 
      1 3 5 7   */ 

     Tree myTree = new Tree(4); 

     myTree.left = new Tree(2); 
     myTree.right = new Tree(6); 

     myTree.left.left = new Tree(1); 
     myTree.left.right = new Tree(3); 

     myTree.right.left = new Tree(5); 
     myTree.right.right = new Tree(7); 



     System.out.println("BST or NOT?" + ifBST(myTree,Integer.MIN_VALUE,Integer.MAX_VALUE)); 




    } 

} 

我的问题:

  1. 从代码作为清楚,我手动输入我的二叉树的所有条目,所以如果有一种情况我需要检查那些手动输入不是好主意的大树,那么应该遵循什么样的最佳方法呢?

  2. 由于我在主要方法中通过了ifBST(myTree,Integer.MIN_VALUE,Integer.MAX_VALUE),这是否意味着Integer.MIN_VALUE = 1Integer.MAX_VALUE = 7被传递给方法体呢?

感谢

回答

1
  1. 的有效性。如果你想创建一个大的树,我会建议你创建一个insertIntoTree(Tree node, int value)功能,增加了在适当的位置的新节点。然后,您可以根据需要多次调用该函数,可能是随机生成的值。请注意,尽管您有可能以不平衡的BT结束,但仍然是BT。
  2. 不,它不会通过图1和7到ifBST,它会通过对整数类型的最小和最大可能值 - 这可能是-2^31-1和2^31。
0

1)这听起来像你想编写一个附加功能。这是一个遍历树的函数,从根开始。如果您希望插入的值小于根节点,请输入左侧节点。如果它大于根节点,请输入正确的节点。使用递归重复此操作,直到您要输入的节点为空。然后在该点创建一个新的树节点,并将左侧或右侧的子节点设置为该节点。

2)想想,使其成为一个二叉搜索树的条件。左边的节点应该小于父节点,右边的节点要大一些。利用这些条件,你将如何确保树