資料結構 二叉搜尋樹之節點刪除

2021-10-05 07:14:49 字數 1084 閱讀 5884

/**

* 二叉搜尋樹的刪除一般分為三種情況;

* 1. 要刪除的節點本身是葉子結點 -> 直接刪除

* 2. 要刪除的節點本身只有乙個孩子節點 -> 用孩子節點替換他

* 3. 要刪除的節點本身有兩個孩子節點 -> 找到該節點a 的後繼節點(比該節點大的最小節點,也就是右子樹的最左葉子結點)b 然後用b替換a 最後再右子樹中刪除b(又可以分為 1、2 按對應的情況處理即可)

** @param root

* @param value

* @return

*/public treenode

delete

(treenode

root, integer value)

//如果根節點大於目標值,則該值所處節點在根節點的左子

if(root.value > value)

//如果根節點小於目標值,則該值所處節點在根節點的右子樹

else

if(root.value < value)

//如果根節點等於目標值,則該值就在根節點

else

//該節點沒有右子樹

if(root.rightnode == null)

//此時左子樹和右子樹都不為空,則去找後繼節點

treenode

minnext =

findsuccessor

(root.rightnode)

;//將要刪除節點的值替換為後繼節點的值

root.value = minnext.value;

//刪除後繼節點

root.rightnode =

delete

(root.rightnode, root.value);}

return root;

}/**

* 尋找後繼節點

* @param root

* @return

*/public treenode

findsuccessor

(treenode

root)

return root;

}

二叉搜尋樹 刪除節點

前幾天寫了簡單的二叉排序樹的實現,僅僅提供了插入和查詢操作,沒有寫刪除給定節點操作。現在補充過來,不過這個代價似乎太大了點 二叉排序樹的刪除操作主要有兩點要注意 1 必須修改的是刪除節點父節點的資訊 2 有四種情況需要考慮 刪除節點有無左右子樹的 4個組合 再加上一點就是要細心,考慮各種情況,例如根...

二叉搜尋樹c 資料結構二叉搜尋樹

在n個動態的整數中搜尋某個整數?檢視其是否存在 假設使用動態陣列存放元素,從第 0 個位置開始遍歷搜尋,平均時間複雜度 o n 如果維護乙個有序的動態陣列,使用二分搜尋,最壞時間複雜度 o logn 但是新增 刪除的平均時間複雜度是 o n 針對這個需求,有沒有更好的方案?今天我們主要講的就是二叉搜...

二叉搜尋樹 刪除二叉搜尋樹中的節點

這裡就把平衡二叉樹中刪除節點遇到的情況都搞清楚。第一種情況 沒找到刪除的節點,遍歷到空節點直接返回了 找到刪除的節點 第二種情況 左右孩子都為空 葉子節點 直接刪除節點,返回null為根節點 第三種情況 刪除節點的左孩子為空,右孩子不為空,刪除節點,右孩子補位,返回右孩子為根節點 第四種情況 刪除節...