gpt4 book ai didi

c++ - 检查树是否只有奇数的函数C++

转载 作者:行者123 更新时间:2023-12-02 10:07:07 25 4
gpt4 key购买 nike

因此,我们有一棵带有存储数字的节点的树。

{
int data;
treeNode* child;
treeNode* sibling;

treeNode(int data) :data(data), child(nullptr), sibling(nullptr) {}
treeNode() {}
};

我正在尝试检查每个节点是否存储一个奇数。
例:
           1 -- 3
/ \
5 7

这里 1 是根,其他是它的 子项,该函数应返回true。
private:
bool isOdd(treeNode* node)const
{
if (!node) //I think the problem might be here but I don't really know how to fix it
return true;
if (node->data % 2 == 0)
return false;
return isOdd(node->child);
return isOdd(node->sibling);
}
public:
bool isOdd()const
{
if (root->data % 2 == 0)
return false;

return isOdd(root->child);
}

如上所示,我正在使用递归,但是我也愿意使用迭代方法。

提前致谢!

最佳答案

在这行之后

return isOdd(node->child);

后面的代码很生气,因为正如Yksisarvinen所评论的那样,在执行了 return语句后,该函数完成了,将不会执行其他任何操作。

return isOdd(node->sibling);

不会影响结果,即 sibling 将被忽略。

为了始终返回受两个部分影响的内容,您需要进行逻辑运算
return (isOdd(node->sibling) && isOdd(node->child));

另一方面,您的代码
if (!node) return true;

对我来说似乎很好。如果您分析一个指向什么都没有的指针(不对它进行取消引用,则是好的),那么说“无”不能打破“所有奇数”是有意义的,因此返回true对我来说是有意义的。

关于c++ - 检查树是否只有奇数的函数C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59703552/

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