簡體   English   中英

刪除二叉搜索樹中的節點

[英]Deleting a node in Binary Search Tree

我做了一個 function 從 BST 中刪除一個節點。 我想知道這兩個遞歸代碼是否做同樣的事情

BstNode* temp = new BstNode();
temp = root;
delete(root);
return temp->left;
return root->left;

我知道第一個從堆 memory 中刪除了根目錄,但它向 memory 添加了臨時代碼,所以它與第二個代碼相同嗎?

對不起,但必須說清楚:這段代碼毫無意義。

 BstNode* temp = new BstNode(); // (1) temp = root; // (2) delete(root); // (3) return temp->left; // (4)

(1)動態分配一個BstNode (2)中將root分配給temp后,在(1)中分配的 memory 被泄露。 你失去了對它的任何引用。

然后(3)刪除roottemp指向相同,由於(2)中的分配,它與root具有相同的值。 因此(4)是由於取消引用懸空指針而導致的未定義行為。

這段代碼不好。

另一方面是:

return root->left;

取消引用root並返回其left成員。 如果root是有效指針,則此代碼不會導致與第一個相同的災難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM