java二叉排序算法实现

参考至:https://www.cnblogs.com/mzct123/p/8288047.html

简要分析:
BinaryTree:二叉排序树的类,包括二叉排序添加元素的方法,和顺序打印方法。其中每个二叉树都包含一个root节点。小。
Node:节点子类:节点类,包括节点数据,左节点(左子树)和右节点(右子树),还包括向节点中添加子节点addNode的方法。其中节点数据data是comparable类型,为了可以直接使用compareTo算法进行比较大

核心:每向二叉树中添加一个元素,其实就相当于想已经存在的二叉树的节点中添加一个节点。 但是二叉树,每次比较都是从根节点开始比较,因此,root节点就成为了二叉树添加的起始参考点

此外,我们用来比较的类型,需要实现Comparable接口。可以直接调用compareTo方法。

class BinaryTree{
    class Node{          //声明一个节点类
        private Comparable data;  //节点的数据类型为Comparable
        private Node left;   //保存左子树
        private Node right;  //保存右子树
        public Node(Comparable data){   //构造函数
            this.data = data;
        }
        public void addNode(Node newNode){
            //确定是放在左子树还是右子树
            if(newNode.data.compareTo(this.data)<0){  //新节点值小于当前节点
                if(this.left == null){
                    this.left = newNode;  //左子树为空的话,新节点设为左子树
                }else{
                    this.left.addNode(newNode); //否则继续向下判断
                }
            }else{  //新节点的值大于或等于当前节点
                if(this.right == null){
                    this.right = newNode;
                }else{
                    this.right.addNode(newNode);
                }
            }
        }
        
        public void printNode(){  //采用中序遍历
            if(this.left != null){   //如果不为空先输出左子树
                this.left.printNode();
            }
            System.out.print(this.data+"\t");  //输出当前根节点
            if(this.right != null){  //输出右子树
                this.right.printNode();  
            }
        }
    }
    private Node root;    //表示根元素
    
    public void add(Comparable data){    //向二叉树中插入元素
        Node newNode = new Node(data);
        if(root == null){   //没有根节点
            root = newNode;
        }else{
		     root.addNode(newNode); /**/判断放在左子树还是右子树 *  向根节点中加入新的节点。
        }
    }
    
    //中序遍历打印,按顺序打印出数据。
    public void print(){
        root.printNode();   //根据根节点输出
    }
}

public class TestBinaryTreeSort {
    public static void main(String args[]){
        BinaryTree bt = new BinaryTree();
        bt.add(3);
        bt.add(5);
        bt.add(4);
        bt.add(8);
        bt.add(7);
        bt.add(8);
        bt.add(1);
        bt.print();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值