public
class
solution
}public treenode deletenode
(treenode root,
int key)
// 根節點的刪除 特殊處理
if(key == root.val)
root.left =
deletenode
(root.left, root.val);}
else
root.right =
deletenode
(root.right,root.val);}
else}}
if(key < root.val)
if(key > root.val)
if(root.left == null)
if(root.right == null)
//求前驅節點
treenode predecessor =
maximum
(root.left)
;// 1
treenode predecessorcopy =
newtreenode
(predecessor.val)
;//先remove再銜接
// null
predecessorcopy.left =
removemax
(root.left)
;// 3
predecessorcopy.right = root.right;
root.left = null;
root.right = null;
return predecessorcopy;
}/**
* 兩種情況,一種 node.right == null 說明前驅節點為刪除節點的左節點,否則為刪除節點的右側葉節點(對應maximum(root.left))
** @param node
* @return
*/private treenode removemax
(treenode node)
node.right =
removemax
(node.right)
;return node;
}private treenode maximum
(treenode node)
return
maximum
(node.right);}
public
static
void
inorder
(treenode node)
}public
static
void
main
(string[
] args)
}
排序二叉樹 刪除節點
前面 我們已經了解了什麼是排序二叉樹以及排序二叉樹的遍歷和新增元素,現在我們一起來看一下,排序二叉樹是如何刪除元素的。步驟先找到要刪除的節點 targetnode 找到要刪除節點的父節點 parent 一 刪除葉子節點 1.確定 targetnoe 是 parent 的左子節點還是右子節點 2.根據...
二叉樹,排序二叉樹
說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會...
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...