[英]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)
刪除root
但temp
指向相同,由於(2)
中的分配,它與root
具有相同的值。 因此(4)
是由於取消引用懸空指針而導致的未定義行為。
這段代碼不好。
另一方面是:
return root->left;
取消引用root
並返回其left
成員。 如果root
是有效指針,則此代碼不會導致與第一個相同的災難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.