请在下面找到一个简单的二叉搜索树检查代码:
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));
}
}
我的问题:
从代码中可以清楚地看到,我已经手动输入了二叉树的所有条目,所以如果有需要检查大树的情况,手动输入不是一个好主意,那么应该是应该遵循的最佳方法吗?
由于我在main方法中通过了ifBST(myTree,Integer.MIN_VALUE,Integer.MAX_VALUE)
,这是否意味着将Integer.MIN_VALUE = 1
和Integer.MAX_VALUE = 7
传递给方法正文?
谢谢
答案 0 :(得分:1)
insertIntoTree(Tree node, int value)
函数,在正确的位置添加一个新节点。然后,您可以根据需要在循环中调用该函数,可能使用随机生成的值。请注意,虽然您最终会遇到不平衡的BT,但仍然是BT。ifBST
,它将传递Integer类型的最小和最大可能值 - 可能是-2 ^ 31-1和2 ^ 31。答案 1 :(得分:0)
1)听起来你想写一个添加功能。这是一个从根开始遍历树的函数。如果要插入的值小于根节点,请输入左节点。如果它大于根节点,请输入正确的节点。使用递归重复此操作,直到您要输入的节点为空。然后在该点创建一个新的树节点,并将左或右子节点设置为该节点。
2)考虑使其成为二叉搜索树的条件。左侧节点应小于父节点,右侧节点应大于父节点。使用这些条件,您将如何确保树的有效性