二叉尋找樹--java

來源:互聯網
上載者:User

標籤:dma   search   最小值   amp   oid   尋找樹   string   boolean   turn   

package com.test.tree;public class BinarySearchTree<T extends Comparable<? super T>> {    /*定義二叉樹的節點*/    private class BinaryNode<T>{        public T data;        public BinaryNode<T> lt;        public BinaryNode<T> rt;                public BinaryNode(T data) {            this(data, null, null);        }        public BinaryNode(T data, BinaryNode<T> lt, BinaryNode<T> rt) {            this.data = data;            this.lt = lt;            this.rt = rt;        }    }        private BinaryNode<T> root; //定義二叉尋找樹的根節點        public BinarySearchTree(){ //初始化二叉尋找樹        root = null;    }        public void makeEmpty(){ //樹清空        root = null;    }        public boolean isEmpty(){ //樹判空        return root == null;    }        public boolean contains(T x){ //判斷是否包含某個值        return contains(root, x);    }    public boolean contains(BinaryNode<T> root, T x){        if(root == null){            return false;        }        int compare = x.compareTo(root.data);        if(compare == 0){            return true;        }else if(compare < 0){            contains(root.lt, x);        }else {            contains(root.rt, x);        }        return false;    }        public T findMin(){ //獲得樹中最小值        if(!isEmpty()){            return findMin(root).data;        }        return null;    }    public T findMax(){ //獲得樹中最大值        if(!isEmpty()){            return findMax(root).data;        }        return null;    }        public void insert(T data){ //插入資料        root = insert(data, root);    }        public void remove(T data){        root = remove(data, root);    }        public void printTree(){        if(root == null){            System.out.println("empty tree");        }else{            printTree(root);        }    }    /*中序遍曆*/    public void printTree(BinaryNode<T> t){        if(t != null){            printTree(t.lt);            System.out.print(t.data+"、");            printTree(t.rt);        }    }    /**     * 刪除尋找樹的某個節點,首先用要刪除節點的右子樹中最小值替換節點值,     * 再從右子樹中刪除此節點,遞迴調用     * */    public BinaryNode<T> remove(T data, BinaryNode<T> t){        if(t == null){            return t;        }        int compare = data.compareTo(t.data);                if(compare < 0){            //插入值比根節點的值小,插入到左字數            t.lt = remove(data, t.lt);        }else if(compare > 0){            //插入值比根節點的值小,插入到左字數            t.rt = remove(data, t.rt);        }else if(t.lt != null && t.rt != null){            t.data = findMin(t.rt).data; //將右子樹中的最小值賦給要刪除的節點            t.rt = remove(t.data, t.rt);        }else{            t = t.lt == null? t.rt:t.lt;        }        return t;    }    public BinaryNode<T> insert(T data, BinaryNode<T> t){        if(t == null){            return new BinaryNode<T>(data, null, null);        }        int compare = data.compareTo(t.data);        if(compare < 0){            //插入值比根節點的值小,插入到左字數            t.lt = insert(data, t.lt);        }else if(compare > 0){            //插入值比根節點的值小,插入到左字數            t.rt = insert(data, t.rt);        }else{        }        return t;    }    public BinaryNode<T> findMin(BinaryNode<T> t){        if(t == null){            return t;        }else if(t.lt == null){ //尋找樹的左邊比節點值小,找到最左邊的節點即可            return t;        }else{            return findMin(t.lt);        }    }        public BinaryNode<T> findMax(BinaryNode<T> t){        if(t == null){            return null;        }else if(t.rt == null){ //尋找樹的右邊比節點值大,找到最右邊的節點即可            return t;        }        return findMax(t.rt);    }        public static void main(String[] args) {        BinarySearchTree<Integer> binarySearchTree = new BinarySearchTree<Integer>();        binarySearchTree.insert(8);        binarySearchTree.insert(4);        binarySearchTree.insert(6);        binarySearchTree.insert(3);        binarySearchTree.insert(14);        binarySearchTree.insert(10);        System.out.println("最小值: "+binarySearchTree.findMin());        System.out.println("最大值: "+binarySearchTree.findMax());        binarySearchTree.printTree();        binarySearchTree.remove(8);        System.out.println();        binarySearchTree.printTree();    }}

 

二叉尋找樹--java

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.