我应该在二叉树中添加条目多久?

时间:2013-04-11 19:54:49

标签: java algorithm

请在下面找到一个简单的二叉搜索树检查代码:

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. 由于我在main方法中通过了ifBST(myTree,Integer.MIN_VALUE,Integer.MAX_VALUE),这是否意味着将Integer.MIN_VALUE = 1Integer.MAX_VALUE = 7传递给方法正文?

  3. 谢谢

2 个答案:

答案 0 :(得分:1)

  1. 如果你想创建一个大树,我建议你创建一个insertIntoTree(Tree node, int value)函数,在正确的位置添加一个新节点。然后,您可以根据需要在循环中调用该函数,可能使用随机生成的值。请注意,虽然您最终会遇到不平衡的BT,但仍然是BT。
  2. 不,它不会将1和7传递给ifBST,它将传递Integer类型的最小和最大可能值 - 可能是-2 ^ 31-1和2 ^ 31。

答案 1 :(得分:0)

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

2)考虑使其成为二叉搜索树的条件。左侧节点应小于父节点,右侧节点应大于父节点。使用这些条件,您将如何确保树的有效性