二叉搜尋樹節點的刪除較節點的插入和查詢難以理解,涉及到以下情況:
節點為空時直接返回false;
if (_root == null)
有乙個節點的時候,判斷要刪除的值是否和節點的權值相等,相等刪除並返回true;不想等刪除失敗返回false;
if (_root->_left ==
null
&&_root->_right ==
null)
return
false;
}
當樹的節點眾多時,首先找到需要刪除節點cur的位置,記錄節點的父親節點parent1.當cur的左子樹為空的時候
要刪除節點cur的parent節點為空,其實刪除的就是這棵樹的根節點,讓cur的右節點作為根節點,delete掉cur,置空。刪除節點cur的parent不為空cur在parent的左子樹:cur在parent的右子樹:
}2.當cur的右子樹為空的時候
要刪除節點cur的parent節點為空,其實刪除的就是這棵樹的根節點,讓cur的左節點作為根節點,delete掉cur,置空。刪除節點cur的parent節點不為空的時候cur節點在parent的左子樹:cur節點在parent的右子樹:
}3.當左右子樹都不為空的時候
}遞迴**:
void remove_r(const t& key)
bool _remove_r(node*& root, const t& key)
if (root->_left ==
null
&&root->_right ==
null)
}//先找到要刪除的節點
if (root->_key > key)
else
if (root->_key < key)
else
else
if (root->_right ==
null)
else
if (root->_left !=
null
&&root->_right !=
null)
root->_key = subright->_key;
//將右子樹的最左節點和root節點的權值換了之後,需要刪除的點替換成右子樹的最左節點
//再遞迴呼叫一次函式,將右子樹的根節點和需要刪除的權值傳進去,即可刪除。
_remove_r(root->_right, subright->_key);}}
return
false;
}
二叉樹節點的刪除
昨天在看書的時候,突然看到二叉查詢樹的刪除,以前學過,不過學的不仔細,結果研究了一晚上,才把二叉樹的刪除操作給整出來。唉,以後看書要仔細啊。先說一下如何刪除二叉樹查詢樹的節點吧。總共有三種情況 1.被刪除的節點是葉子節點,這時候只要把這個節點刪除,再把指向這個節點的父節點指標置為空就行 2.被刪除的...
二叉樹節點的刪除
昨天在看書的時候,突然看到二叉查詢樹的刪除,以前學過,不過學的不仔細,結果研究了一晚上,才把二叉樹的刪除操作給整出來。唉,以後看書要仔細啊。先說一下如何刪除二叉樹查詢樹的節點吧。總共有三種情況 1.被刪除的節點是葉子節點,這時候只要把這個節點刪除,再把指向這個節點的父節點指標置為空就行 2.被刪除的...
783 二叉搜尋樹節點最小距離
給定乙個二叉搜尋樹的根結點 root,返回樹中任意兩節點的差的最小值。示例 輸入 root 4,2,6,1,3,null,null 輸出 1 解釋 注意,root是樹結點物件 treenode object 而不是陣列。給定的樹 4,2,6,1,3,null,null 可表示為下圖 4 2 6 1 ...