/**
* BST树的节点类型
* @param <T>
*/
class BSTNode <T extends Comparable<T>>{
private T data; // 数据域
private BSTNode<T> left; // 左孩子域
private BSTNode<T> right; // 右孩子域
public BSTNode(T data, BSTNode<T> left, BSTNode<T> right) {
this.data = data;
this.left = left;
this.right = right;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public BSTNode<T> getLeft() {
return left;
}
public void setLeft(BSTNode<T> left) {
this.left = left;
}
public BSTNode<T> getRight() {
return right;
}
public void setRight(BSTNode<T> right) {
this.right = right;
}
}
/**
* BST树的实现
* @param <T>
*/
class BST<T extends Comparable<T>>{
private BSTNode<T> root; // 指向根节点
/**
* BST树的初始化
*/
public BST() {
this.root = null;
}
/**
* 判断是否是二叉树的子树
* @param tree
* @return
*/
public boolean isChildTree(BST<T> tree){
BSTNode<T> cur = this.root;
while (cur!=null){
if (cur.getData().compareTo(tree.root.getData())>0){
cur = cur.getLeft();
}if (cur.getData().compareTo(tree.root.getData())<0){
cur = cur.getRight();
}else {
break;
}
}
if (cur==null){
return false;
}
return isChildTree(cur,tree.root);
}
private boolean isChildTree(BSTNode<T> f, BSTNode<T> c) {
if(f == null && c == null){
return true;
}
if(f == null){
return false;
}
if(c == null){
return true;
}
if(f.getData().compareTo(c.getData()) != 0){
return false;
}
return isChildTree(f.getLeft(), c.getLeft())
&& isChildTree(f.getRight(), c.getRight());
}
}