【问题标题】:Function that checks if a tree has only odd numbers C++检查一棵树是否只有奇数的函数 C++
【发布时间】: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 所建议的那样。谢谢!
  • 我将这棵树用于某项任务。我还有一个插入方法,允许用户将新节点作为兄弟节点或子节点放在给定级别上(取决于级别)

标签: c++ tree


【解决方案1】:

这一行之后

return isOdd(node->child);

下面是 ingored,因为正如 Yksisarvinen 所评论的那样,在执行了一条 return 语句之后,函数就完成了,不会执行任何其他操作。

return isOdd(node->sibling);

不会影响结果,即忽略同级。

为了总是返回受这两个部分影响的东西,你需要一个逻辑操作

return (isOdd(node->sibling) && isOdd(node->child));

另一方面,您的代码

if (!node) return true;

对我来说似乎很好。如果您分析一个指向空的指针(没有取消引用它,很好),那么说“Nothing”不能破坏“all odd”是有道理的,所以返回 true 对我来说是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2016-01-24
    • 2023-03-29
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多