实现二叉查找树
/*
* wgy
* 2020/8/3
* 14:41
* 实现二叉查找树
*/
public class BinarySortTree {
//二叉树的根节点
private Node root;
//元素个数
private int size;
public int getSize() {
return size;
}
//添加元素
public void add(int v){
if(root==null){//当前树是空的
root=new Node(v);
size++;
System.out.println("添加了根元素:"+v);
}else{//不是空
//根添加子节点
boolean b=root.addChild(v);
System.out.println(b);
if(b){
size++;
}
}
}
//中序遍历
public void middleList(){
root.printNode();
}
/**
* 节点类型
*/
static class Node{
//元素数据
private int item;
//左节点
private Node left;
//右节点
private Node right;
public Node(int item) {
this.item = item;
}
//添加孩子节点方法
public boolean addChild(int v){
if(this.item>v){//v放在左边
if(this.left==null){//左边没有元素
this.left=new Node(v);
System.out.println(v+"放在"+this.item+"的左边");
}else{
return this.left.addChild(v);//递归
}
}else if(this.item<v){//v方法右边
if(this.right==null){
this.right=new Node(v);
System.out.println(v+"放在"+this.item+"的右边");
}else{
return this.right.addChild(v);
}
}else{
System.out.println(v+"重复元素");
return false;
}
return true;
}
//打印元素
public void printNode(){
//判断左边,如果有元素打印
if(this.left!=null){
this.left.printNode();
}
//打印元素
System.out.println(this.item);
//判断右边,如果元素打印
if(this.right!=null){
this.right.printNode();
}
}
}
}