二叉查找树--java
生活随笔
收集整理的這篇文章主要介紹了
二叉查找树--java
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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();}
}
?
轉載于:https://www.cnblogs.com/studyDetail/p/7152008.html
總結
以上是生活随笔為你收集整理的二叉查找树--java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx upstream 常用的几种
- 下一篇: PCI总线的含义是什么?PCI总线的主要