專題 二叉搜尋樹節點的刪除

2021-08-17 08:04:19 字數 2722 閱讀 4619

二叉搜尋樹節點的刪除較節點的插入和查詢難以理解,涉及到以下情況:

節點為空時直接返回false;

if (_root == null)

有乙個節點的時候,判斷要刪除的值是否和節點的權值相等,相等刪除並返回true;不想等刪除失敗返回false;

if (_root->_left ==

null

&&_root->_right ==

null)

return

false;

}

當樹的節點眾多時,首先找到需要刪除節點cur的位置,記錄節點的父親節點parent

1.當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 ...