91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何刪除二叉樹中的節點

發布時間:2021-11-20 09:30:11 來源:億速云 閱讀:436 作者:柒染 欄目:大數據

如何刪除二叉樹中的節點,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

算法:

1.后驅算法:

/*遞歸解法:1.找到需要刪除的節點2.刪除的節點只有右子樹或者左子樹,直接將右子樹或者左子樹的根節點當作這個刪除的節點3.刪除的節點左右子樹都存在的情況下,左子樹的最大節點也叫做前驅當作刪除節點,或者將右子樹的最小節點也就稱作后驅當作刪除節點。*/

2.前驅算法:

/*遞歸解法:1.找到需要刪除的節點2.刪除的節點只有右子樹或者左子樹,直接將右子樹或者左子樹的根節點當作這個刪除的節點3.刪除的節點左右子樹都存在的情況下,左子樹的最大節點也叫做前驅當作刪除節點,或者將右子樹的最小節點也就稱作后驅當作刪除節點。*/

題目:

如何刪除二叉樹中的節點

后驅算法:

如何刪除二叉樹中的節點

func deleteNode(root *TreeNode, key int) *TreeNode {    if root == nil {        return nil    }    if key < root.Val {        root.Left = deleteNode(root.Left,key)        return root    }    if key > root.Val {        root.Right = deleteNode(root.Right,key)        return root    }    // 這里通過遞歸已經找到了要刪除的節點,此時因為遞歸的原因還是root這個指針    if root.Right == nil {        return root.Left    }    if root.Left == nil {        return root.Right    }    // 后驅的方法來替換當前節點    min := root.Right    for min.Left != nil {        min = min.Left    }    root.Val = min.Val // 替換需要刪除的節點的數值,這里就是復制    root.Right = deleteMin(root.Right) // 這里把右子樹中移動過來的那個最小節點刪除掉    return root}func deleteMin(root *TreeNode) *TreeNode{    // 左子樹不在的話,表示這個節點就是要刪除的最小節點    // 存在兩種情況,一:這個節點就是葉子節點,直接通過賦值為nil, 來當作刪除節點。    // 二:這個節點沒有左子樹,只有右子樹,這樣的話,需要將右子樹替換成該節點    if root.Left == nil {         right := root.Right        root.Right = nil         return right    }    root.Left = deleteMin(root.Left) // 左子樹一直在的話,就一直通過左子樹去找最小節點    return root}

前驅算法

如何刪除二叉樹中的節點

func deleteNode(root *TreeNode, key int) *TreeNode {    if root == nil {        return nil    }    if key < root.Val {        root.Left = deleteNode(root.Left,key)        return root    }    if key > root.Val {        root.Right = deleteNode(root.Right,key)        return root    }    // 這里通過遞歸已經找到了要刪除的節點,此時因為遞歸的原因還是root這個指針    if root.Right == nil {        return root.Left    }    if root.Left == nil {        return root.Right    }    // 前驅的方法來替換當前節點    max := root.Left    for max.Right != nil {        max = max.Right    }    root.Val = max.Val    root.Left = deleteMax(root.Left)    return root}
func deleteMax(root *TreeNode) *TreeNode {    if root.Right == nil {        left := root.Left        root.Left = nil        return left    }    root.Right = deleteMax(root.Right)    return root}/*遞歸解法:1.找到需要刪除的節點2.刪除的節點只有右子樹或者左子樹,直接將右子樹或者左子樹的根節點當作這個刪除的節點3.刪除的節點左右子樹都存在的情況下,左子樹的最大節點也叫做前驅當作刪除節點,或者將右子樹的最小節點也就稱作后驅當作刪除節點。*/

看完上述內容,你們掌握如何刪除二叉樹中的節點的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

砀山县| 永康市| 洛宁县| 通榆县| 蛟河市| 和田县| 济宁市| 印江| 贞丰县| 璧山县| 巢湖市| 墨竹工卡县| 长汀县| 从江县| 武邑县| 泉州市| 绥阳县| 司法| 枞阳县| 邵阳市| 龙里县| 正安县| 定结县| 华蓥市| 山丹县| 开阳县| 遂平县| 南通市| 论坛| 华亭县| 纳雍县| 漳浦县| 昭苏县| 连平县| 神农架林区| 伊川县| 景东| 辰溪县| 龙游县| 陈巴尔虎旗| 泸州市|