Leetcode 112 路徑總和
阿新 • • 發佈:2020-11-07
Leetcode 112 路徑總和
資料結構定義:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ 給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定如下二叉樹,以及目標和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1 返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。
遞迴寫法:
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); } }
廣度優先遍歷:
class Solution{ //思路:定義兩個佇列,分別儲存tree和疊加的value //每次從Tree佇列那出一個值,判斷(1:是否是葉子節點,疊加的value是否等於sum) public boolean hasPathSum(TreeNode root, int sum) { if(root == null){ return false; } Queue<TreeNode> queueTree = new LinkedList<>(); Queue<Integer> queueValue = new LinkedList<>(); queueTree.offer(root); queueValue.offer(root.val); while(!queueTree.isEmpty()){ TreeNode node = queueTree.poll(); int value =queueValue.poll(); if(node.left == null && node.right == null && value == sum){ return true; } if(node.left != null){ queueTree.offer(node.left); queueValue.offer(value + node.left.val); } if(node.right != null){ queueTree.offer(node.right); queueValue.offer(value + node.right.val); } } return false; } }