二叉搜索树

来源:互联网 发布:手机网络助手下载 编辑:程序博客网 时间:2024/05/20 01:08
package 第四章2;import java.util.LinkedList;import java.util.Queue;import javax.xml.bind.Unmarshaller;public class BinarySearchTree2<T extends Comparable<? super T>>{    Node<T> root;    public BinarySearchTree2() {        root=null;    }    public static class Node<T>    {        T data;        Node<T> left;        Node<T> right;        public Node(T data)        {this.data=data;this.left=null;this.right=null;}        public Node(T data,Node<T> left,Node<T> right)        {this.data=data;this.left=left;this.right=right;}    }    public void insert(T x)    {        root=insert(x,root);    }    private Node<T> insert(T x, Node<T> root)     {        if(root==null)            return new Node<T>(x,null, null);        int compareResult=x.compareTo(root.data);        if(compareResult<0)            root.left=insert(x, root.left);        else if(compareResult>0)            root.right=insert(x, root.right);        else             ;        return root;    }    public void remove(T x)    {        root=remove(x, root);    }    private Node<T> remove(T x,Node<T> root)    {        if(root==null)            ;// do nothing ,not found        int compareResult=x.compareTo(root.data);        if(compareResult<0)            root.left=remove(x, root.left);        else if(compareResult>0)            root.right=remove(x, root.right);        else if(root.left!=null && root.right!=null)        {            T element=findMin(root.right);            root.data=element;            root.right=remove(element, root.right);        }        else             root=root.left!=null?root.left:root.right;         return root;    }    public T findMin()    {        return findMin(root);    }    public T findMin(Node<T> root)    {        Node<T> p=root;        if (p==null) {            throw new RuntimeException("当前二叉树为空树");        }        while(p.left!=null)        {            p=p.left;        }        return p.data;    }    public T findMax()    {        Node<T> p=root;        if (p==null) {            throw new RuntimeException("当前二叉树为空树");        }        while(p.right!=null)        {            p=p.right;        }        return p.data;    }    public void layerview()    {        LinkedList<Node<T>> queue=new LinkedList<>();        queue.addLast(root);        Node<T> p;        while(!queue.isEmpty())        {            p=queue.removeFirst();            System.out.print(p.data+" ");            if(p.left!=null)                queue.addLast(p.left);            if(p.right!=null)                queue.addLast(p.right);         }System.out.println();    }    public static void main(String[] args) {        BinarySearchTree2<Integer> tree=new BinarySearchTree2<Integer>();        tree.insert(3);        tree.insert(13);        tree.insert(43);        tree.insert(21);        tree.insert(99);        tree.insert(65);        tree.insert(24);        tree.insert(45);        tree.insert(77);        tree.layerview();        System.out.println(tree.findMin());         System.out.println(tree.findMax());        tree.remove(99);        tree.layerview();        tree.remove(21);        tree.layerview();    }}