gpt4 book ai didi

c++ - 从 C++ 中的 BST 中提取子树

转载 作者:行者123 更新时间:2023-11-28 01:32:05 25 4
gpt4 key购买 nike

我正在处理 C++ 作业。该项目包括为二叉搜索树构建模板类。

到目前为止,我已经实现了基本的方法和迭代器,一切似乎都运行良好。我现在必须实现一个方法 subtree(const T &value)那,给定目标 value , 返回带有 value 的树作为根。

到目前为止,我已经定义了这个:

binarySearchTree subtree(const T &target) {

nodo* node = findValue(target);

binarySearchTree<T> newTree;
newTree._root = node;

return newTree;
}

哪里findValue是:

nodo* findValue(const T &target){

if(_root -> value == target) {
return _root;
}
else
return findValueHelper(_root, target);
}

findValueHelper是:

nodo* findValueHelper(nodo *ptr, const T &val) const {

if (ptr == NULL)
return NULL;
if (val < ptr -> value)
return findValueHelper(ptr -> left, val);
else if (val > ptr -> value)
return findValueHelper(ptr -> right, val);
else
return ptr;

}

nodo只是我的结构 T value , 一个 leftright指针。

现在的问题:

提取的子树是正确的,但在我打印它之后我得到一个 segmentation fault错误,尽管所有元素都正确显示。

main我在打电话:

binarySearchTree<int> sub = t.subtree(2);
std::cout << sub << std::endl;

我显然重新定义了 operator=operator<< .

最佳答案

由于您没有发布所有实现,这是一个猜测,但可能是正确的。

newTree._root = node; 将指针复制到节点。现在您在两棵树中使用了一个节点。但是树的析构函数可能会释放节点。因此,当一棵树超出范围时(例如,在函数的末尾),节点将被释放并且指针将变为无效。下次分配某些东西时,您的节点将被覆盖。所以打印仍然有效(虽然是未定义的行为)但是你的树被破坏了。

关于c++ - 从 C++ 中的 BST 中提取子树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51082289/

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