二叉搜尋樹 刪除節點

2021-04-12 11:39:05 字數 1654 閱讀 7453

前幾天寫了簡單的二叉排序樹的實現,僅僅提供了插入和查詢操作,沒有寫刪除給定節點操作。現在補充過來,不過這個代價似乎太大了點:)。二叉排序樹的刪除操作主要有兩點要注意:

1)必須修改的是刪除節點父節點的資訊;

2)有四種情況需要考慮(刪除節點有無左右子樹的

4個組合)。再加上一點就是要細心,考慮各種情況,例如根節點情況等。

實現原始碼為:

//main.cpp

/////題目描述:刪除給定二叉排序樹的給定節點

// //

k_eckel

(韋福如)

//2005-09-30

// #include

using namespace std;

template

struct node

};template

void insert(node*& root,const t& key)

if (root->_key > key)

insert(root->_lchild,key);

else

insert(root->_rchild,key); }

template

void delete(node*& root,const t& key)

//找不到待刪除節點

if (null == crt) return ;

//待刪除節點無左右節點

//思想:修改當前節點父節點的左右(視當前節點是父節點的左右指標定)指標為

null

, //

注意處理根節點情況

if ((null == crt->_lchild) && (null == crt->_rchild))

else //

為葉子節點 }

//有左子樹,沒有右子樹

//思想:修改當前節點父節點的左右(視當前節點是父節點的左右指標定)指標指向當前節點左子樹,

//注意處理根節點情況

if ((null != crt->_lchild) && (null == crt->_rchild))

else }

//有右子樹,沒有左子樹

//思想:修改當前節點父節點的左右(視當前節點是父節點的左右指標定)指標指向當前節點右子樹,

//注意處理根節點情況

if ((null == crt->_lchild) && (null != crt->_rchild))

else }

//左右子樹都存在,則將右子樹最左端節點複製到待刪除節點

//思想:將右子樹中最左的節點代替刪除節點,注意處理根節點和右子樹無左子樹的情況

if ((null != crt->_lchild) && (null != crt->_rchild))

else

if (crt == root)

if (crt == prt->_lchild)

prt->_lchild = p;

else

prt->_rchild = p;

} delete crt; }

template

void inorderprint(const node* root,const char* info)

} int main(int argc,char* argv)

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

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

刪除二叉搜尋樹中的節點

刪除二叉搜尋樹中的節點 class solution cur left root left 把要刪除的結點root左子樹放在cur的左孩子位置 treenode tmp root 把root結點儲存一下,下面去刪除 root root right 返回舊root的右孩子作為新root delete ...

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

示例 root 5,3,6,2,4,null,7 key 3 5 3 6 2 4 7 給定需要刪除的節點值是 3,所以我們首先找到 3 這個節點,然後刪除它。一個正確的答案是 5,4,6,2,null,null,7 如下圖所示。5 4 6 2 7 另一個正確答案是 5,2,6,null,4,null...

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

給定一個二叉搜尋樹的根節點 root 和一個值 key,刪除二叉搜尋樹中的 key 對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度...

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

刪除二叉搜尋樹中的節點 給定一個二叉搜尋樹的根節點 root 和一個值 key,刪除二叉搜尋樹中的 key 對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為...