C++ 函数,用于检查树是否只有奇数C++;
我们有一棵树,树上有存储数字的节点C++ 函数,用于检查树是否只有奇数C++;,c++,tree,C++,Tree,我们有一棵树,树上有存储数字的节点 { int data; treeNode* child; treeNode* sibling; treeNode(int data) :data(data), child(nullptr), sibling(nullptr) {} treeNode() {} }; 我试图检查每个节点是否都存储奇数。 例如: 这里,1是根,其他的是它的子项,函数的目的是返回true private: bool isOdd(treeNo
{
int data;
treeNode* child;
treeNode* sibling;
treeNode(int data) :data(data), child(nullptr), sibling(nullptr) {}
treeNode() {}
};
我试图检查每个节点是否都存储奇数。
例如:
这里,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);
下面的一个是ingored,因为正如Yksisarvinen所评论的,在执行了一个return
语句之后,函数完成了,将不会执行任何其他操作。即 不会影响结果,即忽略兄弟姐妹 为了始终返回由两个部分影响的内容,您需要一个逻辑操作
return (isOdd(node->sibling) && isOdd(node->child));
另一方面,您的代码
if (!node) return true;
我觉得很好。如果你分析一个指针,它指向什么都没有(不去引用它,很好),那么说“什么都没有”是有意义的,不能打破“所有的奇数”,所以返回真对我来说是有意义的 您想检查所有节点是否都是奇数,但实际上您要检查左子节点还是右子节点是否是奇数。将永远不会执行
return
之后的代码。您需要与或不同的逻辑运算符。解决方案如@Yunnosch所建议。谢谢我用这棵树来完成某项任务。我还有一个插入方法,允许用户将新节点作为兄弟节点或子节点(取决于级别)放置在给定级别上
return (isOdd(node->sibling) && isOdd(node->child));
if (!node) return true;