1.代码
package TestTree;/*
* zt
* 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{//不是空
//给根添加子节点
if(root.addChild(v)){
size++;
}
}
}
//中序遍历
public void middleleList(){
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);//递归(可能出现重复元素false的情况)
}
}else if(this.item<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();
}
}
}
}
将main方法写在了另一个测试类里面
package TestTree;/*
* zt
* 2020/8/3
* 15:03
*
*/
public class TestBinarySortTree {
public static void main(String[] args) {
BinarySortTree tree = new BinarySortTree();
tree.add(10);
tree.add(30);
tree.add(30);
tree.add(40);
tree.add(50);
System.out.println("元素个数:"+tree.getSize());
tree.middleleList();
}
}
2.运行结果
添加了根元素10
30放在10的右边
30重复元素
40放在30的右边
50放在40的右边
元素个数:4
10
30
40
50