亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java刪除二叉搜索樹最大元素和最小元素的方法詳解

 更新時間:2020年03月29日 11:53:59   作者:WFaceBoss  
這篇文章主要介紹了Java刪除二叉搜索樹最大元素和最小元素的方法,結合實例形式詳細分析了java針對二叉搜索樹的基本遍歷、查找、判斷、刪除等相關操作技巧,需要的朋友可以參考下

本文實例講述了Java刪除二叉搜索樹最大元素和最小元素的方法。分享給大家供大家參考,具體如下:

在前面一篇《Java二叉搜索樹遍歷操作》中完成了樹的遍歷,這一節(jié)中將對如何從二叉搜索樹中刪除最大元素和最小元素做介紹:
我們要想刪除二分搜索樹的最小值和最大值,就需要先找到二分搜索樹的最小值和最大值,其實也還是很容易的,因為根據(jù)二叉搜索樹的特點,它的左子樹一定比當前節(jié)點要小,所以二叉搜索樹的最小值一定是左子樹一直往下走,一直走到底。同樣在二叉搜索樹中,右子樹節(jié)點值,一定比當前節(jié)點要大,所以右子樹一直往下走,就一定是最大值。

注意向左走一直到走不動并不是一定要達到葉子節(jié)點,只用達到走不動為止,看下圖的例子:

向左走到16就走不動了,但是16下面還有元素。

一、查詢操作

1.1 查詢二分搜索樹的最小節(jié)點

 // 尋找二分搜索樹的最小元素
  public E minimum() {
    if (size == 0) {
      throw new IllegalArgumentException("BST is empty");
    }

    Node ninNode = minimum(root);
    return ninNode.e;
  }

  // 返回以node為根的二分搜索樹的最小值所在的節(jié)點
  private Node minimum(Node node) {
    if (node.left == null) {
      return node;
    }

    //返回相應的節(jié)點的左子樹的最小值
    return minimum(node.left);
  }

1.2 查詢二分搜索樹的最大節(jié)點

 // 尋找二分搜索樹的最大元素
  public E maxmum() {
    if (size == 0)
      throw new IllegalArgumentException("BST is empty");
    Node maxNode = maxmum(root);

    return maxNode.e;
  }

  // 返回以node為根的二分搜索樹的最大值所在的節(jié)點
  private Node maxmum(Node node) {
    if (node.right == null) {
      return node;
    }

    return maxmum(node.right);
  }

二、刪除操作

刪除最小值的思路:
1)如果要刪除的節(jié)點是葉子節(jié)點,那么直接刪除
2)如果要刪除的節(jié)點下面有右子樹,那么只用將其下的右子樹整體上移成為上一個節(jié)點的左子樹即可

當刪除22這個節(jié)點后,把33這個節(jié)點及其以下的子樹變成41節(jié)點的左子樹即可。

2.1 刪除最小值
 public E removeMin() {
    E ret = minimum();//獲取最小元素
    root = removeMin(root);

    return ret;
  }

  // 刪除掉以node為根的二分搜索樹中的最小節(jié)點
  // 返回刪除節(jié)點后新的二分搜索樹的根
  private Node removeMin(Node node) {

    // 遞歸的終止條件,當前節(jié)點沒有左子樹了,那么就是最小節(jié)點了
    // 如果是最小節(jié)點,我們要做的是刪除當前節(jié)點,但是當前節(jié)點很可能是有右子樹的
    // 我們先把該節(jié)點的右子樹節(jié)點保存,然后就刪除掉該右子樹節(jié)點,最后把右子樹節(jié)點返回即可
    if (node.left == null) {
      Node rightNode = node.right;
      node.right = null; //左節(jié)點為空了,讓右子樹也為空,相當于脫離了樹
      size--;
      return rightNode;//返回右子樹是為了后面的綁定操作
    }

    // 沒有遞歸到底的情況,那么就遞歸調用其左子樹,這個調用的過程會返回被刪除節(jié)點的右子樹,
    //將返回的右子樹重新綁定到上一層的node的左節(jié)點上就相當于徹底刪除了那個元素
    node.left = removeMin(node.left);

    return node;// 刪除后,根節(jié)點依然是node,返回即可
  }
2.2 刪除最大值
 // 從二分搜索樹中刪除最大值所在節(jié)點
  public E removeMax() {
    E ret = maxmum();
    root = removeMax(root);
    return ret;
  }

  // 刪除掉以node為根的二分搜索樹中的最大節(jié)點
  // 返回刪除節(jié)點后新的二分搜索樹的根
  private Node removeMax(Node node) {
    if (node.right == null) {
      Node leftNode = node.left;
      node.left = null;
      size--;
      return leftNode;
    }

    node.right = removeMax(node.right);//等號"="左邊的相當于上一次的right,右邊相當于下一次返回的結果
    return node;

  }

 源碼地址 https://github.com/FelixBin/dataStructure/blob/master/src/BST/BST.java

更多關于java算法相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

  • SpringMVC實現(xiàn)文件下載功能

    SpringMVC實現(xiàn)文件下載功能

    這篇文章主要為大家詳細介紹了SpringMVC實現(xiàn)文件下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • java優(yōu)化if-else的11種方案

    java優(yōu)化if-else的11種方案

    If-Else結構是一種常見的條件判斷語句,通過優(yōu)化If-Else結構,可以提高代碼的可讀性和執(zhí)行效率,本文主要介紹了java優(yōu)化if-else的11種方案,感興趣的可以了解一下
    2024-08-08
  • Java基礎之不簡單的數(shù)組

    Java基礎之不簡單的數(shù)組

    數(shù)組(Array)是有序的元素序列。 若將有限個類型相同的變量的集合命名,那么這個名稱為數(shù)組名。組成數(shù)組的各個變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時也稱為下標變量
    2021-09-09
  • 解決JavaMail附件名字過長導致的亂碼問題

    解決JavaMail附件名字過長導致的亂碼問題

    這篇文章主要介紹了解決JavaMail附件名字過長導致的亂碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎

    ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎

    這篇文章主要介紹了ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • SpringBoot整合WebSocket實現(xiàn)后端向前端主動推送消息方式

    SpringBoot整合WebSocket實現(xiàn)后端向前端主動推送消息方式

    這篇文章主要介紹了SpringBoot整合WebSocket實現(xiàn)后端向前端主動推送消息方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • struts2中類型轉換實例代碼

    struts2中類型轉換實例代碼

    這篇文章主要介紹了struts2中類型轉換實例代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • java程序中的延時加載異常及解決方案

    java程序中的延時加載異常及解決方案

    這篇文章主要介紹了java程序中的延時加載異常及解決方案,需要的朋友可以參考下
    2015-02-02
  • java實現(xiàn)簡單發(fā)送郵件功能

    java實現(xiàn)簡單發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單發(fā)送郵件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java面試之動態(tài)規(guī)劃與組合數(shù)

    Java面試之動態(tài)規(guī)劃與組合數(shù)

    這篇文章主要介紹了Java面試之動態(tài)規(guī)劃與組合數(shù)的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09

最新評論