【问题标题】:How to get sum of children and check if it's equal to root?如何获得孩子的总和并检查它是否等于根?
【发布时间】:2022-12-30 01:21:03
【问题描述】:

我在 leetcode 上解决了一个问题,如果根等于孩子的总和 这是我的代码

    var checkTree = function (root) {
  root[0] = root[0] === undefined ? 0 : root[0];
  root[1] = root[1] === undefined ? null : root[1];
  root[2] = root[2] === undefined ? null : root[2];
  if (root[0] === root[1] + root[2]) {
    return true;
  } else {
    return false;
  }
};

checkTree([10, 4, 6]);

但是当我提交时它说这是错误的。

这是问题的链接:https://leetcode.com/problems/root-equals-sum-of-children/

【问题讨论】:

  • 为什么要进行这些检查而不是简单的return root[0] === root[1] + root[2]
  • 你是对的,我应该这样做,但问题还没有解决。
  • 检查@Pratik 的回答。简而言之,解决方案中有一个隐藏部分将数组[10, 4, 6]转换为TreeNode结构,这实际上是一个对象。因此,要访问 root 的值 (10),您实际上应该执行 root.val 语句,而不仅仅是 root[0]

标签: javascript


【解决方案1】:

解释

所以问题给了你这样的节点定义

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**

在 checkTree 函数中,您收到 root 作为参数。 这个 root 只不过是 TreeNode 的一个实例,它看起来像

root = {val: 35, right: null, left: null}

rightleft 也可以指向其他树节点。

问题给你一个root节点,left节点和一个right节点

root.left 指向的节点是您的left 节点,root.right 指向的节点是您的right 节点

所以假设如果我的树是这样的

root5个, root.left 将是节点3个root.right 将是节点1个

root.left.val 等于3个root.right.val 等于1个& root.val5个

因此,如果 root.left.valroot.right.val 的加法等于 root.val,则 return 语句将返回 true,否则返回 false

所以在这种情况下它会返回 false 作为3 + 1不等于5个

这就是下面代码的工作方式:)

var checkTree = function(root) {
    return root.left.val + root.right.val === root.val
};

【讨论】:

  • 我看到了这个解决方案,但无法理解。如果你能解释一下,我会很感激并提前致谢
  • 非常感谢伙计。你的解释是如此清晰和简单。我很感激,再次感谢。
【解决方案2】:

谢谢,

我快到了,但不知道我也需要左右后面的 .val。 所以我在 return root.val == (root.left + root.right);

由于 .val 不在左右的定义中。

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 2022-12-03
    • 2019-01-24
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2022-07-22
    相关资源
    最近更新 更多