gpt4 book ai didi

c++ - 将指针更改为指向指针的引用

转载 作者:行者123 更新时间:2023-11-30 04:03:09 25 4
gpt4 key购买 nike

我有一个方法可以将节点插入二叉树,它使用指向指针的指针在树中正确分配新节点。

由于我使用的是 C++,我认为可以将此指针更改为指向指针引用的指针,从而生成更清晰的 C++ 类代码。但是如何做到这一点并保持分配正确呢?

bool insert(T value) {
node** buff = &root;

while ((*buff) != NULL) {
if (value == (*buff)->value) {
return false;
} else if (value < (*buff)->value) {
buff = &(*buff)->left;
} else {
buff = &(*buff)->right;
}
}

*buff = new node(value);
return true;
}

最佳答案

没有测试,但这是想法:当你在父级时插入,而不是当你下降到 null 时:

bool insert(T value) {
if (root == nullptr) {
root = new node(value);
return true;
}

node* buff = root;
while(buff->value != value) {
if (value < buff->value) {
if(buff->left == nullptr {
buff->left = new node(value);
return true;
}
buff = buff->left;
} else {
if (buff->right == nullptr) {
buff->right = new node(value);
return true;
}
buff = buff->right;
}
}

return false;
}

我会怎么写:

// returns the node under which the insertion must be done
// or nullptr if the value already exists in the tree
// prereq: tree must be not empty
node* findParentInsertionPoint(T value) {
if (root == nullptr) {
throw std::logic_erro("");
}

node* n = root;
while(n->value != value) {
if (value < n->value) {
if(n->left == nullptr {
return buff;
}
n= n->left;
} else {
if (n->right == nullptr) {
return n;
}
n= n->right;
}
}
return nullptr;
}

// inserts a leaf as child of parent
// prereq: parent must be not null
// the corresponding child must be null;
void insertLeafAt(T value, node * parent) {
if (parent == nullptr) {
throw std::logic_error("");
}
if (value < parent->value) {
parent->left = new node(value);
} else {
parent->right = new node(value);
}
}

bool insert(T value) {
if (root == nullptr) {
root = new node(value);
return true;
}

node* parent = findParentInsertionPoint(value);
if (parent == nulptr) {
return false;
}
insertLeafAt(T value, parent);
return true;
}

关于c++ - 将指针更改为指向指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24662862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com