精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

刪除二叉搜索樹中的節點

算法與數據結構 ? 來源:五分鐘學算法 ? 2020-06-23 10:33 ? 次閱讀

今天分享的題目來源于 LeetCode 第 450 號問題:刪除二叉搜索樹中的節點。雖然它的難度是中等,但實際上很好理解,請往下看!

題目描述

給定一個二叉搜索樹的根節點root和一個值key,刪除二叉搜索樹中的key對應的節點,并保證二叉搜索樹的性質不變。返回二叉搜索樹(有可能被更新)的根節點的引用。

一般來說,刪除節點可分為兩個步驟:

首先找到需要刪除的節點;

如果找到了,刪除它。

說明:要求算法時間復雜度為 O(h),h 為樹的高度。

示例:

root=[5,3,6,2,4,null,7] key=3 5 / 36 / 247 給定需要刪除的節點值是3,所以我們首先找到3這個節點,然后刪除它。 一個正確的答案是[5,4,6,2,null,null,7], 如下圖所示。 5 / 46 / 27 另一個正確答案是[5,2,6,null,4,null,7]。 5 / 26 47

題目解析

在二叉搜索樹上刪除一個節點,這道題目有一個隱含的條件,就是樹上節點的值不重復。

另外題目還要求時間復雜度需要保證 O(h) 這里的 h 表示的是二叉樹的高度。

其實這個題目是分成兩個步驟的,第一個是找到對應的節點,第二個是刪除節點。

因為是二叉搜索樹,對于樹上每個節點來說,其右子樹的節點都要大于其左子樹的節點,那么要找對應節點,我們可以從根節點開始,一路比較,大的話就去右邊找,小的話就去左邊找,這樣每次我們都往下,可以保證時間復雜度是 O(h)。

當我們找到了要刪除的節點,在刪除這一步就會有很多的細節,主要是因為我們需要調整余下的結構,以維持二叉搜索樹的性質。

針對這個問題,我們可以分情況討論:

5 / 36 / 247 / 18

情況 1:當刪除的節點沒有左右子樹,比如上圖的 4、8、1
這時直接刪除即可,樹依舊可以保持二叉搜索樹的性質

情況 2:當刪除的節點有左子樹沒有右子樹,比如上圖的 2
這時我們只需要將整個左子樹移到當前位置即可
也就是將左子樹的根節點放到刪除節點的位置,其余不變

情況 3:當刪除的節點沒有左子樹有右子樹,比如上圖的 6、7
這時我們只需要將整個右子樹移到當前位置即可
也就是將右子樹的根節點放到刪除節點的位置,其余不變

情況 4:當刪除的節點既有左子樹又有右子樹,比如上圖的 5、3
這時就有兩種方法供選擇:
去到左子樹中,找到值最大節點,將右子樹全部移到這個節點下
去到右子樹中,找到值最小節點,將左子樹全部移到這個節點下

通過上面的討論分析,我們有了大致的思路。在實現方面,我們可以借助遞歸來巧妙地達到刪除對應節點的目的。

圖片描述

參考代碼

//五分鐘學算法 publicTreeNodedeleteNode(TreeNoderoot,intkey){ if(root==null){ returnnull; } //當前遍歷到的節點大于要找的節點,去左邊繼續找 if(root.val>key){ root.left=deleteNode(root.left,key); } //當前遍歷到的節點小于要找的節點,去右邊繼續找 elseif(root.val

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4551

    瀏覽量

    92017
  • 二叉樹
    +關注

    關注

    0

    文章

    74

    瀏覽量

    12283

原文標題:五分鐘看懂一道中等難度的算法題

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    節點電壓法電壓源怎么處理

    節點電壓法(Node Voltage Method,簡稱NVM)是電路分析的一種基本方法,主要應用于求解線性電路節點電壓。在節點電壓法
    的頭像 發表于 07-12 09:20 ?693次閱讀

    指電極上覆蓋敏感材料的阻值計算

    覆蓋的敏感材料厚度超出指厚度時計算電阻,是否可以視作指電極指間電阻多個周期串聯后與超出指厚度部分敏感材料電阻并聯
    發表于 07-05 14:48

    語音數據集在智能語音搜索的應用與挑戰

    揮著重要作用,為系統提供了豐富的語音數據和信息,提高了搜索的準確性和效率。本文將詳細介紹語音數據集在智能語音搜索的應用、面臨的挑戰以及未來的發展趨勢。 、語音數據集在智能語音
    的頭像 發表于 01-18 15:09 ?451次閱讀

    使用自旋表啟動的平臺設備cpu節點介紹

    補充一下一個使用自旋表作為啟動方式的平臺設備cpu節點: arch /arm64/ boot /dts/ xxx.dtsi: cpu@ 0 { device_type = "cpu
    的頭像 發表于 12-05 16:19 ?653次閱讀

    數據結構:刪除有序鏈表的重復節點

    給定一個有序單鏈表(從小到大有序)的頭結點head(該結點有值),刪除鏈表的重復元素,使鏈表的所有元素都只出現一次。如當輸入 {1,1,2} 時,經刪除后,原鏈表變為 {1,2},
    的頭像 發表于 12-05 15:46 ?547次閱讀
    數據結構:<b class='flag-5'>刪除</b>有序鏈表的重復<b class='flag-5'>節點</b>

    【米爾-TIAM62開發板-接替335x-試用評測】+(三)手把手創建Uboot設備與內核設備實戰

    經驗。 在板載設備,如何通過修改設備層級來增加新的設備樹節點? 原理:在設備,可以通過
    發表于 11-28 09:54

    堆的實現思路

    什么是堆? 堆是一種 基于樹結構的數據結構,它是一棵二叉樹 ,具有以下兩個特點: 堆是一個完全二叉樹,即除了最后一層,其他層都是滿的,最后一層從左到右填滿。 堆每個節點都滿足堆的特性
    的頭像 發表于 11-24 16:02 ?331次閱讀
    堆的實現思路

    二叉樹的定義

    型結構 是一類重要的 非線性數據結構 ,其中以二叉樹最為常用,直觀來看,是以分支關系定義的層次結構。型結構在客觀世界中廣泛存在,比
    的頭像 發表于 11-24 15:57 ?1034次閱讀
    <b class='flag-5'>樹</b>與<b class='flag-5'>二叉樹</b>的定義

    linux刪除文件命令rm

    在Linux系統,可以使用rm命令來刪除文件或目錄。該命令的功能是刪除一個目錄的一個或多個文件或目錄,也可以將某個目錄及其下的所有文件及子目錄均
    的頭像 發表于 11-13 16:42 ?692次閱讀

    什么情況下需要布隆過濾器

    , gmail等郵箱垃圾郵件過濾功能 這幾個例子有一個共同的特點:如何判斷一個元素是否存在一個集合? 常規思路 數組 鏈表 、平衡二叉樹、Trie Map (紅黑) 哈希表 雖然
    的頭像 發表于 11-11 11:37 ?552次閱讀
    什么情況下需要布隆過濾器

    紅黑的特點及應用

    比起理解紅黑的原理,更重要的是理解紅黑的應用場景,因為某些應用場景的需要,紅黑才會應運而生。 紅黑的特點: 插入,刪除,查找都是O(
    的頭像 發表于 11-10 11:16 ?609次閱讀
    紅黑<b class='flag-5'>樹</b>的特點及應用

    linux刪除文件的命令

    在Linux,可以使用 rm 命令來刪除文件。該命令有多個參數和選項可供使用,以根據不同的情況進行文件刪除操作。例如: rm 命令后面跟上文件名,可以刪除單個文件。 rm -r 或
    的頭像 發表于 11-08 14:11 ?592次閱讀

    為什么MySQL索引要用B+tree?

    紅黑是一種特化的 AVL(平衡二叉樹),都是在進行插入和刪除操作時通過特定操作保持二叉查找
    發表于 10-30 14:41 ?170次閱讀

    文件系統-多二叉樹的轉化

    在這一節,我們來學習如何使用程序來實現一棵文件。在上一節,我們了解到使用文件的方式來整合計算機中所有的資源,而這一棵文件則是一棵多
    的頭像 發表于 10-11 10:06 ?768次閱讀
    文件系統-多<b class='flag-5'>叉</b><b class='flag-5'>樹</b>與<b class='flag-5'>二叉樹</b>的轉化

    數據結構面試之二叉樹相關操作

    根據前序可知根結點為1; 根據序可知 4 7 2 為根結點 1 的左子樹和 8 5 9 3 6 為根結點 1 的右子樹; 遞歸實現,把 4 7 2 當做新的一棵和 8 5 9 3 6 也當做新的一棵; 在
    發表于 10-10 14:50 ?182次閱讀
    數據結構面試之<b class='flag-5'>二叉樹</b>相關操作