LeetCode 之 JavaScript 解答第112題 —— 路徑總和(Path Sum)


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


題目: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.java

Note: A leaf is a node with no children.node

給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上全部節點值相加等於目標和。

說明: 葉子節點是指沒有子節點的節點。git

示例:
給定以下二叉樹,以及目標和 sum = 22github

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.code

Solve:

▉ 問題分析
1)搜索從根節點到葉子節點可以達到目標值,毋庸置疑,一看到檢索二叉搜索樹,就應該想起遞歸。

2)第一個想法就是一個個進行相加,將每條路徑相加完成以後,判斷是否達到當前目標值?遞歸

3)可是 (2)的解決方案的想法要用到遞歸上,須要轉變一下思路,畢竟咱們要用遞歸的編程技巧來解決,因此思惟須要稍微轉變一下(將問題化成子問題,子問題與總問題有相同的解決思路)。ip

▉ 算法思路
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... 歡迎關注我我的公衆號:「一個不甘平凡的碼農」,記錄了本身一路自學編程的故事。
相關文章
相關標籤/搜索