gpt4 book ai didi

C++链接二叉搜索树(DeleteTree)

转载 作者:行者123 更新时间:2023-11-27 23:27:52 24 4
gpt4 key购买 nike

我必须使用 C++ 为其中一项作业实现二叉搜索树。我已经创建了该类,并尝试为该类实现 InsertItem、PrintTree、DeleteTree 方法,我认为我做的一切都是正确的,但由于某种原因我的程序不断崩溃:(

这是我的代码:

打印树方法

template <class TItem>
void BinarySearchTree<TItem>::PrintTree()
{
PrintTree(RootNode);
}

template <class TItem>
void BinarySearchTree<TItem>::PrintTree(BinarySearchTreeNode* Node)
{
if(Node == NULL)
return;

cout << Node->Data << endl;
PrintTree(Node->LeftChild);
PrintTree(Node->RightChild);
}

DeleteTree 方法

template <class TItem>
void BinarySearchTree<TItem>::DeleteTree()
{
DeleteTree(RootNode);
}

template <class TItem>
void BinarySearchTree<TItem>::DeleteTree(BinarySearchTreeNode* Node)
{
if(Node == NULL)
return;

DeleteTree(Node->LeftChild);
DeleteTree(Node->RightChild);

delete Node;
}

我的方法调用顺序直到程序崩溃:

我插入项目 F,B,G,A,D,I,C,E,H:工作正常

我调用 PrintTree():工作正常

我调用 DeleteTree():工作正常

我再次调用 PrintTree():程序崩溃

由于某些原因,表达式 if(RootNode == NULL) 在调用 DeleteTree() 方法后未返回 true,因此程序尝试打印一些内容不存在并崩溃。我不确定为什么会这样,我在这里做错了什么?

感谢任何帮助。

最佳答案

调用“delete”不会清空指针。你会想要做的:

delete Node; 
Node = nullptr;

编辑:

按地址传递指针,以便您可以随时清理悬空指针:

void BinarySearchTree<TItem>::DeleteTree(BinarySearchTreeNode *&node);

关于C++链接二叉搜索树(DeleteTree),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043393/

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