判断要求
判断一个二叉树是否为搜索树Binary Search Tree
- 对于每一个节点,左子树的所有值小于此节点,右子树的所有值大于此节点。
- 每一个节点的值都不重复(without duplicate values)。
class BinaryTree {
private int key;
private BinaryTree left, right;
/**
* Simple constructor.
*
* @param key
* to set as key.
*/
public BinaryTree(int key) {
this.key = key;
}
/**
* Extended constructor.
*
* @param key
* to set as key.
* @param left
* to set as left child.
* @param right
* to set as right child.
*/
public BinaryTree(int key, BinaryTree left, BinaryTree right) {
this.key = key;
setLeft(left);
setRight(right);
}
public int getKey() {
return key;
}
/**
* @return the left child.
*/
public BinaryTree getLeft() {
return left;
}
/**
* @return the right child.
*/
public BinaryTree getRight() {
return right;
}
public boolean hasLeft() {
return left != null;
}
public boolean hasRight() {
return right != null;
}
/**
* @param left
* to set
*/
public void setLeft(BinaryTree left) {
this.left = left;
}
/**
* @param right
* to set
*/
public void setRight(BinaryTree right) {
this.right = right;
}
}
方法1:简单的比较节点与其左孩子和右孩子
对每一个节点进行操作:简单的比较节点的值与其左孩子和右孩子的值。这是初学的时候最容易想到的方法。
但是是错误的!!!我最开始的时候因为对二叉搜索树的定义理解有疏漏。写出了以下代码:
public static boolean isTreeBST(BinaryTree tree) {
if(tree.hasLeft()){
if(tree.getLeft().getKey() < tree.getKey()){
isTreeBST(tree.getLeft());
}else{
return false;
}
}
if(tree.hasRight())