[英]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.