package week3.day10;
/**
* 2020/8/3
* 15:08
* zmx
*/
public class TestBinarySortTree {
public static void main(String[] args) {
BinarySortTree tree=new BinarySortTree();
//添加元素
tree.add(10);
tree.add(5);
tree.add(20);
tree.add(25);
tree.add(30);
tree.add(30);
tree.add(30);
System.out.println(tree.size);
tree.Nodeprint();
}
}
class BinarySortTree{
private Node root;
private int value;
public int size=0;
public void add(int value){
if(this.root==null){
this.root=new Node(value);//添加根节点
size++;
}
else {
boolean b=this.root.addChild(value);//添加子节点
System.out.println(b);
}
}
public void Nodeprint(){
root.print();
}
class Node{
private int v;
private Node left;
private Node right;
public Node(int v) {
this.v = v;
}
public boolean addChild(int value) {
if (this.v>value){
if (this.left!=null) {
return this.left.addChild(value);//
}
else{
this.left=new Node(value);//左节点为空,添加子节点
System.out.println(value+"在 " +this.v+"的左边");
}
}
else if(this.v<value){
if(this.right!=null){
return this.right.addChild(value);//
}
else {
this.right = new Node(value);//添加右节点
System.out.println(value + "在 " + this.v + "的右边");
}
}
else {
System.out.println("重复元素");
return false;
}
return true;
}
public void print(){//中序遍历
if (this.left!=null){
this.left.print();
}
System.out.println(this.v);
if (this.right!=null){
this.right.print();
}
}
}
}
当有重复元素添加时,最深层的addChild会直接向上层返回false,上层再往上侧,最后最高层函数结果为false;如果不用return结束掉当前结束方法,虽然最底层返回结果为false,但上层方法中肯定会有一个返回true的。(能从上层下来,就必然会有true的)