public class BinarySortTreeDemo {
public static void main(String[] args) {
int[] arr={7,3,10,12,5,1,9};
BinarySortTree binarySortTree=new BinarySortTree();
//循环的添加结点到二叉排序树
for(int i=1;i<arr.length;i++){
binarySortTree.add(new Node(arr[i]));
}
//中序遍历排序二叉树
System.out.println("中序遍历二叉排序树~");
binarySortTree.infixOrder();
}
}
//创建二叉排序树
class BinarySortTree{
private Node root;
public void add(Node node){//添加结点的方法
if(root==null){
root=node;//如果root为空则直接让root指向node
}else{
root.add(node);//这是结点的add()方法 为什么不直接在数这个类中写递归添加结点?
}//因为不方便 最后是对树操作 对树操作很难在这个类中定义left和right这些 所以在结点类中定义好这些方法 到时候直接用root直接调
}
public void infixOrder(){
if(root!=null){
root.infixOrder();
}else{
System.out.println("二叉排序树为空,不能遍历");
}
}
}
class Node{
int value;
Node left;
Node right;
public Node(int value) {
this.value = value;
}
//添加结点的方式
//递归的形式添加结点,注意满足二叉排序树的添加要求
public void add(Node node){
if(node==null){
return;
}
//判断传入结点的值,跟当前子树的根结点的值的关系
if(node.value<this.value){
if(this.left==null){//如果当前左子节点为null
this.left=node;
}else{
this.left.add(node);
}
}else{//添加的结点的值大于当前结点的值
if(this.right==null){
this.right=node;
}else{
this.right.add(node);
}
}
}
public void infixOrder(){
if(this.left!=null){
this.left.infixOrder();
}
System.out.println(this.value);
if(this.right!=null){
this.right.infixOrder();
}
}
}