【问题标题】:Children Sum Parent in a Tree孩子和父母在一棵树
【发布时间】:2018-11-16 05:12:42
【问题描述】:

问题是确定子数据的总和是否等于父数据。如果是,则返回 true,否则返回 false。

以下是我的代码,提交时出错。我知道这是一个简单的问题,但是在编写条件之后,我很难通过遍历所有左右节点来递归检查二叉树中每个节点的和条件。

int isSumProperty(Node *node)
{
    if(node == NULL) return 0;
    if((node->left->data + node->right->data) == node->data)
    {
        return 1;
        
    }
    else
    {
        return isSumProperty(node->left)&&isSumProperty(node->right);
    }
    
}

请指导我在哪里做错了。

【问题讨论】:

  • 你的问题很不清楚。孩子数据是指直系孩子还是所有后代?你遇到了什么错误?
  • 我的意思是直系子女。我遇到分段错误

标签: c recursion tree binary-tree


【解决方案1】:

您正在访问node->left->data,但未确保node->left 不是NULL

这会导致分段错误。

【讨论】:

  • 是的,正确的。我会处理这种情况,然后如何递归返回两个值,一个用于左侧,另一个用于右侧?
  • @user2978343 我会再问一次。你究竟要返回什么?如果它是 root 的答案,那么您已经在这样做了。如果问题是树中是否有任何节点满足这一点,那么您可以在左右结果之间使用or。但首先,问题究竟是什么?
  • 我真的很抱歉梅林。如果子父总和相等,我必须返回 1,否则返回 0。我在问题的开头已经提到了这一点
  • @user2978343 在那种情况下,你为什么要递归孩子。一旦左右之和不等于root,答案应该是0吧?
  • 另外,我还有一个疑问,如果我遇到叶子节点,我应该返回false吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多