leetcode 题解 2236. 判断根结点是否等于子结点之和

190 阅读1分钟

先上图。第一次100%。开心!!!

image.png

解题思路:

第一步:直接来个遍历(先序、中序、后序、层序遍历都可以),这里用的是先序遍历。 第二步:用一个值,存储结果,先默认为true,这样只需要判断false的情况就可以了。 第三步:判断当前节点与子结点的关系

  • 3.1 如果该节点为null,return结束遍历
  • 3.2 如果此时的结果为false(表示已经又节点不满足的),return结束遍历
  • 3.3 如果此时的节点为叶子节点,return结束遍历,因为叶子节点没有子结点,根据题意不需要满足条件。
  • 3.4 有左节点,保存左节点的值。有右节点保存右节点的值,此时比较根节点与左右节点的值,不满足条件直接设置结果为false。
  • 3.5 重复遍历3.1-3.4(因为这里用的是递归遍历)

代码如下:

var checkTree = function(root) {
  let result = true;
  function preView(node) {
    if(!node || !result || (!node.left && !node.right)) return;
    let left = 0, right = 0;
    if(node.left) {
      left = node.left.val;
    }
    if(node.right) {
      right = node.right.val;
    }
    if(node.val != left + right) {
      result = false;
    }
    if(node.left) preView(node.left);
    if(node.right) preView(node.right);
  }
  preView(root);
  return result;
};