【发布时间】:2016-10-01 11:27:39
【问题描述】:
我试图了解这个在线创建的功能,用于从 BST 中删除节点。有些事情我看不懂
这是代码:
struct Node* Delete(struct Node *root, int data) {
if (root == NULL) {
return NULL;
}
if (data > root->data) { // data is in the left sub tree.
root->left = Delete(root->left, data);
} else if (data > root->data) { // data is in the right sub tree.
root->right = Delete(root->right, data);
} else {
// case 1: no children
if (root->left == NULL && root->right == NULL) {
delete(root); // wipe out the memory, in C, use free function
root = NULL;
}
// case 2: one child (right)
else if (root->left == NULL) {
struct Node *temp = root; // save current node as a backup
root = root->right;
delete temp;
}
// case 3: one child (left)
else if (root->right == NULL) {
struct Node *temp = root; // save current node as a backup
root = root->left;
delete temp;
}
// case 4: two children
else {
struct Node *temp = FindMin(root->right); // find minimal value of right sub tree
root->data = temp->data; // duplicate the node
root->right = Delete(root->right, temp->data); // delete the duplicate node
}
}
return root; // parent node can update reference
}
问题:
1) 为什么会这样
if (data > root->data) { // data is in the left sub tree.
root->left = Delete(root->left, data);
不应该是if(data < root->data) 吗? (后面的两行代码也一样)
2)函数返回一个指向节点的指针,这是否意味着在主函数中我必须做这样的事情?
int main(){
struct Node *tree=malloc(sizeof(Node));
...
struct Node *new_tree=malloc(sizeof(Node));
new_tree= Delete(tree,24);
所以函数用新树替换旧树,没有节点的 val 24?如果我希望函数是 void 类型,我应该使用双指针吗?
【问题讨论】:
标签: c binary-search-tree nodes