LeetCode 之 JavaScript 解答第112题 —— 途径总和(Path Sum)

Time:2019/4/26
Title: Path Sum
Difficulty: Easy
Author: 小鹿

题目:Path Sum(途径总和)

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

Note: A leaf is a node with no children.

给定一个二叉树和一个目的和,推断该树中是不是存在根节点到恭弘=叶 恭弘子节点的途径,这条途径上一切节点值相加即是目的和。

申明: 恭弘=叶 恭弘子节点是指没有子节点的节点。

示例:
给定以下二叉树,以及目的和 sum = 22

Example:

Given the below binary tree and sum = 22,

      5
     / \
    4   8
   /   / \
  11  13  4
 /  \      \
7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

Solve:

▉ 题目剖析

1)搜刮从根节点到恭弘=叶 恭弘子节点能够到达目的值,毋庸置疑,一看到检索二叉搜刮树,就应该想起递归。

2)第一个主意就是一个个举行相加,将每条途径相加完成以后,推断是不是到达当前目的值?

3)然则 (2)的处理方案的主意要用到递归上,须要转变一下思绪,毕竟我们要用递归的编程技能来处理,所以头脑须要轻微转变一下(将题目化成子题目,子题目与总题目有雷同的处理思绪)。

▉ 算法思绪

1)既然要用到递返来处理,如许来想,每遍历一个结点,我们就用 sum 减去当前结点,然后题目就会变成从当前结点到恭弘=叶 恭弘子节点能够满足 sum 减去当前结点的值,那末就存在满足前提的途径。

2)在(1)中,将题目化成子题目,然后子题目和题目有雷同的处理思绪,那末就能够运用递返来处理。

3)用 flag 做标识,一旦满足途径之和即是目的值,就让转变 flag 的状况。

▉ 代码完成
 var hasPathSum = function(root, sum) {
     let flag = false;
     // 推断当前二叉树是不是即是 null
     if(root == null) return false;

     dfs = (root,sum)=>{
         // 假如当前结点为 null ,返回 false
         if(root == null) return false;
         // 推断摆布子树是不是为 null
         if(root.left == null && root.right == null){
             // 假如不为 null,就推断当前的值和末了一个结点值是不是雷同
             if(sum == root.val){
                 flag = true;
                 return;
             }
         }
         // 递归搜刮一切途径
         dfs(root.left,sum - root.val)
         dfs(root.right,sum - root.val)
     }
     dfs(root,sum)
     return flag;
 };

迎接一同加入到 LeetCode 开源 Github 堆栈,能够向 me 提交您其他言语的代码。在堆栈上对峙和小伙伴们一同打卡,配合完美我们的开源小堆栈!

Github:
https://github.com/luxiangqia…

迎接关注我个人民众号:「一个不甘寻常的码农」,记录了本身一起自学编程的故事。

    原文作者:小鹿
    原文地址: https://segmentfault.com/a/1190000019142638
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞