這裡就把平衡二叉樹中刪除節點遇到的情況都搞清楚。
第一種情況:沒找到刪除的節點,遍歷到空節點直接返回了
找到刪除的節點
第二種情況:左右孩子都為空(葉子節點),直接刪除節點, 返回null為根節點
第三種情況:刪除節點的左孩子為空,右孩子不為空,刪除節點,右孩子補位,返回右孩子為根節點
第四種情況:刪除節點的右孩子為空,左孩子不為空,刪除節點,左孩子補位,返回左孩子為根節點
第五種情況:左右孩子節點都不為空,則將刪除節點的左子樹頭結點(左孩子)放到刪除節點的右子樹的最左面節點的左孩子上,返回刪除節點右孩子為新的根節點。
刪除7節點:
//4.該節點的右子樹為空,返回他下乙個節點,接上
else
if(root-
>right ==
null
)//5.左右子樹都不為空,把左子樹放到右子樹的左葉子節點,返回右子樹
else}if
(root-
>val > key)
root-
>left =
deletenode
(root-
>left, key);if
(root-
>val < key)
root-
>right =
deletenode
(root-
>right, key)
;return root;
}
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹 二叉搜尋樹的刪除操作
如圖刪除 7,4,2直接刪除接可以 如圖 刪除6把7拉上去 如圖 刪除3 4沒有左孩子直接返回4 所以最後的結果只是4覆蓋3 上 class solution if key root.val else if key root.val else else if root.right null else...
二叉搜尋樹 修剪二叉搜尋樹
第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...