日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉查找树--java

發(fā)布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉查找树--java 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
package com.test.tree;public class BinarySearchTree<T extends Comparable<? super T>> {/*定義二叉樹的節(jié)點*/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; //定義二叉查找樹的根節(jié)點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){ //插入數(shù)據(jù)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);}}/*** 刪除查找樹的某個節(jié)點,首先用要刪除節(jié)點的右子樹中最小值替換節(jié)點值,* 再從右子樹中刪除此節(jié)點,遞歸調用* */public BinaryNode<T> remove(T data, BinaryNode<T> t){if(t == null){return t;}int compare = data.compareTo(t.data);if(compare < 0){//插入值比根節(jié)點的值小,插入到左字數(shù)t.lt = remove(data, t.lt);}else if(compare > 0){//插入值比根節(jié)點的值小,插入到左字數(shù)t.rt = remove(data, t.rt);}else if(t.lt != null && t.rt != null){t.data = findMin(t.rt).data; //將右子樹中的最小值賦給要刪除的節(jié)點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){//插入值比根節(jié)點的值小,插入到左字數(shù)t.lt = insert(data, t.lt);}else if(compare > 0){//插入值比根節(jié)點的值小,插入到左字數(shù)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){ //查找樹的左邊比節(jié)點值小,找到最左邊的節(jié)點即可return t;}else{return findMin(t.lt);}}public BinaryNode<T> findMax(BinaryNode<T> t){if(t == null){return null;}else if(t.rt == null){ //查找樹的右邊比節(jié)點值大,找到最右邊的節(jié)點即可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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。