給定乙個二叉搜尋樹的根節點 root 和乙個值 key,刪除二叉搜尋樹中的 key說明: 要求演算法時間複雜度為 o(h),h 為樹的高度。 示例:對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹(有可能被更新)的根節點的引用。
一般來說,刪除節點可分為兩個步驟:
首先找到需要刪除的節點;
如果找到了,刪除它。
root = [5,3,6,2,4,null,7]key = 3
5/ \
3 6
/ \ \
2 4 7
給定需要刪除的節點值是 3,所以我們首先找到 3 這個節點,然後刪除它。
乙個正確的答案是 [5,4,6,2,null,null,7], 如下圖所示。
5/ \
4 6
/ \
2 7
另乙個正確答案是 [5,2,6,null,4,null,7]。
5/ \
2 6
\ \
4 7
/** * definition for a binary tree node.
* type treenode struct */
func deletenode(root *treenode, key int) *treenode
if (key
< root.val)
else
if (key > root.val)
else
if (root.right ==nil)
//new 和 make的區別,要記住
//通過make建立物件 make只能建立slice chan map
//make 只能用來分配及初始化型別為 slice、map、chan 的資料。new 可以分配任意型別的資料;
//new 分配返回的是指標,即型別 *type。make 返回引用,即 type;
//new 分配的空間被清零。make 分配空間後,會進行初始化;
//make 函式只用於 map,slice 和 channel,並且不返回指標
node := new
(treenode)
node = findmin(root.right)
root.val = node.val
root.right = deletenode(root.right, node.val)
}return
root
}func findmin(node *treenode) *treenode
node = node.left
}return
node
}
二叉搜尋樹 刪除二叉搜尋樹中的節點
這裡就把平衡二叉樹中刪除節點遇到的情況都搞清楚。第一種情況 沒找到刪除的節點,遍歷到空節點直接返回了 找到刪除的節點 第二種情況 左右孩子都為空 葉子節點 直接刪除節點,返回null為根節點 第三種情況 刪除節點的左孩子為空,右孩子不為空,刪除節點,右孩子補位,返回右孩子為根節點 第四種情況 刪除節...
二叉搜尋樹 刪除節點
前幾天寫了簡單的二叉排序樹的實現,僅僅提供了插入和查詢操作,沒有寫刪除給定節點操作。現在補充過來,不過這個代價似乎太大了點 二叉排序樹的刪除操作主要有兩點要注意 1 必須修改的是刪除節點父節點的資訊 2 有四種情況需要考慮 刪除節點有無左右子樹的 4個組合 再加上一點就是要細心,考慮各種情況,例如根...
刪除二叉搜尋樹中的節點
刪除二叉搜尋樹中的節點 class solution cur left root left 把要刪除的結點root左子樹放在cur的左孩子位置 treenode tmp root 把root結點儲存一下,下面去刪除 root root right 返回舊root的右孩子作為新root delete ...