二叉树是一种常用的数据结构,每一个元素最多有两棵子树。
在二叉搜索树中,“小于等于”指定节点元素的元素被放到左子树,“大于”指定节点元素的元素放到右子树。
二叉树的定义:
package tree;
/**
* DateTime: 2016/10/21 16:08
* 功能:一棵树的定义
* 思路:
*/
public class SimpleTree<T extends Comparable> {
private T value; //值
private SimpleTree<T> left; //左子树
private SimpleTree<T> right; //右子树
/**
* 构造函数
*/
public SimpleTree(){
value=null;
left=null;
right=null;
}
/**
* 构造函数
* @param value value值
* @param left 当前树的左子树
* @param right 当前树的右子树
*/
public SimpleTree(T value,SimpleTree<T> left,SimpleTree<T> right){
this.value=value;
this.left=left;
this.right=right;
}
/**
* 向树中插入元素
* @param insertValue 需要插入的元素
*/
public void insert(final T insertValue){
if(insertValue.compareTo(value) < 0){ //如果“小于”当前节点元素的元素被放到左子树
if(null==left){
left=new SimpleTree<T>(insertValue,null,null); //左子树为空则新建一棵树并在构造时将值放到树中
}else {
left.insert(insertValue);
}
}else { //如果“大于等于”当前节点元素的元素被放到右子树
if(null==right){
right=new SimpleTree<T>(insertValue,null,null); //右子树为空则新建一棵树并在构造时将值放到树中
}else {
right.insert(insertValue);
}
}
}
/**
* 在树中查找值
* @param key 需要查找的值
* @return 返回是否找到
*/
public boolean findValue(final T key){
if(key.equals(value)){ //如果等于当前树的value则直接放回找到
return true;
}
if(key.compareTo(value) < 0 && null!=left){ //如果小于则在左子树中找
return left.findValue(key);
}
if(key.compareTo(value) > 0 && null!=right){ //否则在右子树中找
return right.findValue(key);
}
return false;
}
/**
* getter方法 和 setter方法
*/
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public SimpleTree<T> getLeft() {
return left;
}
public void setLeft(SimpleTree<T> left) {
this.left = left;
}
public SimpleTree<T> getRight() {
return right;
}
public void setRight(SimpleTree<T> right) {
this.right = right;
}
}
测试:
package tree;
/**
* DateTime: 2016/10/21 16:11
* 功能:创建二叉树并且查找二叉树
* 思路:
*/
public class MyTree {
public static void main(String[] args) {
final SimpleTree<Integer> root=new SimpleTree<>(3,null,null);
root.insert(5);
root.insert(9);
root.insert(9);
root.insert(3);
System.out.println( root.findValue(5) );
System.out.println( root.findValue(9) );
System.out.println( root.findValue(92) );
System.out.println( root.findValue(7) );
}
}
测试结果为: