- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
二叉搜索树的这个删除函数看起来正确吗?当我尝试删除一个节点时,它会运行并带回调用它的切换菜单,但当您重新打印树时实际上并没有删除它。我不确定我是否有不合适的返回,可能吗?
我的问题是:这个删除语句是否真的删除了传递的项目,或者它只是以一种残酷的方式玩弄它让我很头疼?
void BinarySearchTree::remove(int d)
{
//Locate the element
bool found = false;
if(isEmpty())
{
cout<<" This Tree is empty! "<<endl;
return;
}
tree_node* curr;
tree_node* parent;
curr = root;
while(curr != NULL)
{
if(curr->data == d)
{
found = true;
break;
}
else
{
parent = curr;
if(d>curr->data) curr = curr->right;
else curr = curr->left;
}
}
if(!found)
{
cout<<" Data not found! "<<endl;
return;
}
// 3 cases :
// 1. We're removing a leaf node
// 2. We're removing a node with a single child
// 3. we're removing a node with 2 children
// Node with single child
// Node with single child
if((curr->left == NULL && curr->right != NULL) || (curr->left != NULL && curr->right == NULL))
{
if(curr->left == NULL && curr->right != NULL)
{
if(parent->left == curr)
{
parent->left = curr->right;
delete curr;
}
else
{
parent->right = curr->right;
delete curr;
}
}
else // left child present, no right child
{
if(parent->left == curr)
{
parent->left = curr->left;
delete curr;
}
else
{
parent->right = curr->left;
delete curr;
}
}
return;
}
//We're looking at a leaf node
if( curr->left == NULL && curr->right == NULL)
{
if(parent->left == curr)
{
parent->left = NULL;
}
else
{
parent->right = NULL;
}
delete curr;
return;
}
//Node with 2 children
// replace node with smallest value in right subtree
if (curr->left != NULL && curr->right != NULL)
{
tree_node* chkr;
chkr = curr->right;
if((chkr->left == NULL) && (chkr->right == NULL))
{
curr = chkr;
delete chkr;
curr->right = NULL;
}
else // right child has children
{
//if the node's right child has a left child
// Move all the way down left to locate smallest element
if((curr->right)->left != NULL)
{
tree_node* lcurr;
tree_node* lcurrp;
lcurrp = curr->right;
lcurr = (curr->right)->left;
while(lcurr->left != NULL)
{
lcurrp = lcurr;
lcurr = lcurr->left;
}
curr->data = lcurr->data;
delete lcurr;
lcurrp->left = NULL;
}
else
{
tree_node* tmp;
tmp = curr->right;
curr->data = tmp->data;
curr->right = tmp->right;
delete tmp;
}
}
return;
}
}
最佳答案
我阅读了你的代码并在纸上写下了不同的情况,我认为在节点有 2 个子节点的情况下,代码应该是这样的
//Node with 2 children
if (curr->left != NULL && curr->right != NULL)
{
tree_node* chkr;
if(parent==NULL || parent->left==curr){ //if parent==NULL it means that the node that we want to delete is root
chkr=curr->right;
while(chkr->left!=NULL)
chkr=chkr->left;
if(parent!=NULL)
parent->left=curr->right;
else
root=curr->right;
chkr->left=curr->left;
curr->left=curr->right=NULL;
delete curr;
}else if(parent->right==curr){
chkr=curr->left;
while(chkr->right!=NULL)
chkr=chkr->right;
parent->right=curr->left;
chkr->right=curr->right;
curr->left=curr->right=NULL;
delete curr;
}
return;
}
我没有编译或测试它,但我认为它会起作用,请告诉我这件事
关于c++ - 删除二叉搜索树的 fcn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13507389/
我正在阅读多个相互冲突的 Stackoverflow 帖子,我对现实情况感到非常困惑。 我的问题如下。如果我在 128x128x3 图像上训练 FCN,是否可以提供大小为 256x256x3 或 B)
二叉搜索树的这个删除函数看起来正确吗?当我尝试删除一个节点时,它会运行并带回调用它的切换菜单,但当您重新打印树时实际上并没有删除它。我不确定我是否有不合适的返回,可能吗? 我的问题是:这个删除语句是否
我做了这个简单的函数(从 $array 中删除所有 $elem): function remall($array, $elem) { for($i=0; $i < count($array);
我正在尝试在 tensorflow 上重新实现 FCN。我已经实现了反卷积层。 up8_filter = tf.Variable(tf.truncated_normal([64, 64, 21, 21
我正在尝试从头开始在 MATLAB 中实现一个简单的 FCN。我在网络末端实现了 1 个输入(单 channel 图像)神经元、3 个具有 3 个神经元的隐藏层和一个输出神经元,如下图所示: 我希望这
我想尝试实现一个自动编码器全连接卷积神经网络作为 Unet,将一幅图像转换为另一幅图像,它们之间具有未知的非线性关系。 我有高斯核卷积算法,效果很好,但我想尝试一些机器学习方法。 您对其他 ANN 架
我已经构建了一个用于图像分割的 FCN。相对于图像尺寸(1024x1024),要分割的对象只有很少的像素。这导致准确率非常高,即使我只用 10 张图像而不是 18000 张(我的完整训练集)进行训练。
我一直在审阅来自多个来源的内容,包括我最喜欢的 K&R 第二版。 我一直在研究可变参数函数,我看到的几乎所有教程都在省略号之前使用和 int 来确定传递的变量参数总数。 但是书中的K&R例子没有使用i
我目前正在尝试实现 FCN for semantic segmentation在 TensorFlow 中,就像以前在 Caffe 中所做的那样 here . 不幸的是,我正在为以下三件事而苦苦挣扎:
我已经设置了 Caffe 并使用 FCN-8s 模型,输出类几乎没有变化: layer { name: "score_5classes" type: "Convolution" bottom:
我正在尝试实现一个基本的字符堆栈,以增加我对堆栈的理解。我很困惑为什么我能够正确地压入堆栈,但我无法从堆栈中弹出,我遇到了段错误。 这是我的头文件 #include using namespace
Python map() 的文档部分说明: If function is None, the identity function is assumed; 因此,如果我有这样的 Python 代码: d
我正在尝试为 FCN 实现损失函数。我的输出是形状为 (n, c, h, w) 的张量。我的目标形状为 (h, w)。我想计算输出和张量之间的损失,但问题是我有一个掩模。我只对图像的特定部分计算损失和
我正在寻找一种方法,在给定输入图像和神经网络的情况下,它将为图像中的每个像素(天空、草地、山脉、人、汽车等)输出一个带标签的类别。 我已经设置了 Caffe( future 分支)并成功运行了 FCN
我正在尝试使用 scipy.odrpack 进行曲线拟合,但我在使用 odrpack.ODR 命令时遇到了问题。 这是我写的代码: def f(x,i): return i[0]*numpy.
我通过sendto发送一个UDP数据包,然后通过recv接收应答。如果recv没有收到应答,程序会不继续。但是,udp 数据包可能会丢失,或者由于某种原因,数据包可能无法传递,从而使程序卡在 recv
我已经建立了一个用于图像分割的 Keras 模型(U-Net)。然而,在我的样本中,一些错误分类(区域)并不那么重要,而其他则至关重要,所以我想为它们分配更高的损失函数权重。更复杂的是,我希望一些错误
我想测试 shelhamer 给出的 FCN caffemodel图片: 但我不确定如何运行测试程序并显示带标签的图像。 我考虑的代码如下: import caffe caffe_root = 'fc
我遇到了以下一行作为 C 函数声明。我对传入的第一个参数的类型感到困惑。谁能解释一下如何理解第一个参数的类型? int clone(void (*fcn) (void *) , void *arg,
我设计了一个与FCN相同的网络。输入数据是1*224*224,输入标签是1*224*224。但是我遇到错误: F0502 07:57:30.032742 18127 softmax_loss_lay
我是一名优秀的程序员,十分优秀!