Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数,用于检查树是否只有奇数C++;_C++_Tree - Fatal编程技术网

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;