【发布时间】:2020-01-12 11:57:56
【问题描述】:
所以,我们有一棵树,其中包含存储数字的节点。
{
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);
}
如上所示,我使用的是递归,但我也愿意使用迭代的方法。
提前致谢!
【问题讨论】:
-
您想检查 所有 节点是否为奇数,但实际上您检查的是 either 左子节点或右子节点是否奇数。
-
return之后的代码将永远被执行。您需要一个不同于 OR 的逻辑运算符。 -
解决方案正如@Yunnosch 所建议的那样。谢谢!
-
我将这棵树用于某项任务。我还有一个插入方法,允许用户将新节点作为兄弟节点或子节点放在给定级别上(取决于级别)