1. 程式人生 > 其它 >LeetCode0112-路徑總和

LeetCode0112-路徑總和

技術標籤:LeetCode二叉樹演算法javaleetcode路徑總和

LeetCode0112-路徑總和

題目:

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

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

示例:

給定如下二叉樹,以及目標和 sum = 22,

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

返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。

程式碼:

/**
 * 0112-路徑總和
 * 給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,
 * 這條路徑上所有節點值相加等於目標和。
 * <p>
 * 說明: 葉子節點是指沒有子節點的節點。
 * <p>
 * 示例:
 * 給定如下二叉樹,以及目標和 sum = 22,
 * <p>
 * 5
 * / \
 * 4   8
 * /   / \
 * 11  13  4
 * /  \      \
 * 7    2      1
 * <p>
 * 返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。
 */
/** * Definition for a binary tree node. */ class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left;
this.right = right; } } /** * 遞迴實現: * 歸納功能:詢問是否存在當前節點root到葉子節點的路徑,滿足其路徑和為 sum * 假設從根節點到當前節點的值之和為 val,可以將這個大問題轉化成一個小問題:是否出在當前節點 * 到葉子節點的路徑,滿足其路徑和為sum-val. */ class Solution { public boolean hasPathSum(TreeNode root, int sum) { if (root == null) { return false; } if (root.left == null && root.right == null) { return sum == root.val; } return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val); } } /** * 測試 */ public class Study0112 { public static void main(String[] args) { TreeNode root = new TreeNode(5, new TreeNode(4, new TreeNode(11, new TreeNode(7, null, null), new TreeNode(2, null, null)), null) , new TreeNode(8, new TreeNode(13, null, null), new TreeNode(4, null, new TreeNode(1, null, null)))); System.out.println(new Solution().hasPathSum(root, 22)); } }

結果:

在這裡插入圖片描述