自己实现Java中二叉查找树的部分功能(待补充)

来源:互联网 发布:南京正厚软件培训知乎 编辑:程序博客网 时间:2024/05/26 19:17

用于实现二叉查找树的节点对象

package custom.tree;/** * 用于实现二叉树结构的节点 */public class TreeNode<E> {    //左叶子节点    private TreeNode<E> left;    //右叶子节点    private TreeNode<E> right;    //节点上的数据    private E data;    public TreeNode() {        super();    }    public TreeNode(TreeNode<E> left, TreeNode<E> right, E data) {        super();        this.left = left;        this.right = right;        this.data = data;    }    public TreeNode<E> getLeft() {        return left;    }    public void setLeft(TreeNode<E> left) {        this.left = left;    }    public TreeNode<E> getRight() {        return right;    }    public void setRight(TreeNode<E> right) {        this.right = right;    }    public E getData() {        return data;    }    public void setData(E data) {        this.data = data;    }}

二叉树的具体实现代码:

package custom.tree;import java.util.Comparator;//二叉查找树public class BinaryTree<E> {    // 根节点    private TreeNode<E> root;    // 比较器,用来比较存放的数据    private Comparator<? super E> comparator;    public BinaryTree() {    }    // 传入比较器    public BinaryTree(Comparator<? super E> comparator) {        this.comparator = comparator;    }    //获取根节点    public TreeNode<E> getRoot() {        return root;    }    //获取最右边的节点      public TreeNode<E> getMaxNode(){        TreeNode<E> p = root;        if(p.getRight() != null){            p = p.getRight();        }        return p;    }    /**     *  用来比较节点中的数据的大小,模仿TreeMap的源码     *  若  e1 > e2 ,返回正数     */    public int compare(E e1, E e2) {        return comparator == null ? ((Comparable<? super E>) e1).compareTo((E) e2) : comparator.compare((E) e1, (E) e2);    }    /**     * 添加数据同时对数据进行排序     * 建立二叉树结构     */    public void add(E data) {        TreeNode<E> node = new TreeNode<E>();        node.setData(data);        if (root == null) {            root = node;        } else {            TreeNode<E> tar = root;            while (true) {                int r = compare(data,tar.getData());                if(r > 0){                    TreeNode<E> right = tar.getRight();                    if(right == null){                        tar.setRight(node);                        break;                    }else{                        tar = right;                    }                }else if(r < 0){                    TreeNode<E> left = tar.getLeft();                    if(left == null){                        tar.setLeft(node);                        break;                    }else{                        tar = left;                    }                }else{                    break;                }            }        }    }    /**     * 使用递归遍历查找节点     * 从左到右输出节点上的数据     */    public void foreachNode(TreeNode<E> treeNode){        if(treeNode.getLeft() != null)            foreachNode(treeNode.getLeft());        System.out.println(treeNode.getData());        if(treeNode.getRight() != null)            foreachNode(treeNode.getRight());    }}
原创粉丝点击