c++ - 如何将二叉树附加到另一个
问题描述
我正在编写一个函数,它应该附加一个二叉树来替换另一棵树的节点。我将两棵树的根和要替换的节点的标识符传递给函数,但我不确定如何交换指向要删除的节点的指针的地址并将其设置为指向我要附加的树的根。
void Tree::appendTree(TreeNode *ptrMod, TreeNode *ptrApp, string
type_node) {
if (ptrMod == nullptr) {
return;
}
if (ptrMod->getType() == type_node) {
delete(ptrMod);
ptrMod=ptrApp;
} else {
appendTree(*(ptrMod->getLeftAddress()),ptrApp,type_node);
appendTree(*(ptrMod->getRightAddress()),ptrApp,type_node);
}
}
ptrMod 指向我正在检查的节点以检查它是否是我要替换的节点。ptrApp 是我要附加的树的根。
解决方案
需要做的一些改动: 1. 添加一个返回值,以便您知道交换是否成功。2. 递归释放内存对删除的子树。
bool Tree::appendTree(TreeNode* & ptrMod, TreeNode* & ptrApp, string
type_node) {
if(ptrMod==nullptr)
{
return false; // did not swap
}
if(ptrMod->getType() == type_node){
delete(ptrMod); // I hope you overloaded the delete operator to correctly delete all nodes of the tree
ptrMod=ptrApp;
return true; // swapped correctl;
}
else
{
if (appendTree(*(ptrMod->getLeftAddress()),ptrApp,type_node))
return true;
else return appendTree(*(ptrMod->getRightAddress()),ptrApp,type_node);
}
}
推荐阅读
- python - 如何使用 listwidget autosize 策略将 Qlistwidget 项目从行更改为拇指视图,如 windows_explorer/Caja?
- python-3.x - 如何在 debian/control 中将 python >= 3.7 和相关的 venv 设置为 pre-depends?
- git - Git 合并忽略新文件和其他现有文件中的某些更改
- varnish - Varnish 正在运行,但是当我运行 varnishlog 时抛出“Could not get hold of varnishd”
- apache-spark - 如何在保持完整列选择的同时对数据集中的几列进行分组?
- azure - Azure:从 VM 备份日志文件,这是缩减期间自动缩放集的一部分
- python - np.full 有 deepcopy 选项吗?
- javascript - 如何从具有重复值的 2 个数组中获取所有差异?
- java - 从 Java 调用 AWS Lambda 函数
- oracle - 无法从 Spring Boot 应用程序连接到 Oracle DB