LeetCode題解No404——“左葉子之和”
阿新 • • 發佈:2020-09-19
LeetCode題解
No404
難度:Easy
題目描述:
/*
計算給定二叉樹的所有左葉子之和。
示例:
3
/ \
9 20
/ \
15 7
在這個二叉樹中,有兩個左葉子,分別是 9 和 15,所以返回 24
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/sum-of-left-leaves
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
*/
題目思路
今天的題目也是非常簡單的二叉樹的題目,一般對於這種題目,都有DFS和BFS兩種方法去解決,首先DFS就先遞迴,找到每一個分支的最左邊的節點,加上該葉子的值即可。主要是注意遞迴的順序。BFS就需要去維護一個佇列,對二叉樹進行層序遍歷,按層遍歷,當找到一個節點是上個節點的左節點並且該節點沒有葉節點的時候,ans+=該節點的值即可。
public class No404 { public class TreeNode{ int val; TreeNode left; TreeNode right; TreeNode(int x){ val = x; } } public static void main(String[] args) { } // 遞迴遍歷 public int sumOfLeftLeavesRecursion(TreeNode root){ // 特判 if (root == null){ return 0; } return dfs(root); } private int dfs(TreeNode root) { int ans = 0; if (root.left!=null){ if (isLeafNode(root.left)){ ans += root.left.val; }else { ans += dfs(root.left); } } if (root.right != null){ ans += dfs(root.right); } return ans; } // 層序遍歷 public int sumOfLeftLeaves(TreeNode root) { // 特判 if (root == null){ return 0; } // 用一個佇列儲存 Queue<TreeNode> queue = new LinkedList<>(); // 入隊root queue.offer(root); // 結果 int sum = 0; //迭代 while (!queue.isEmpty()){ TreeNode cur = queue.poll(); if (cur.left!=null){ if (isLeafNode(cur.left)){ sum+=cur.left.val; }else { queue.offer(cur.left); } } if (cur.right!=null){ if (!isLeafNode(cur.right)){ queue.offer(cur.right); } } } return sum; } public boolean isLeafNode(TreeNode root){ if (root.right == null && root.left == null){ return true; } return false; } }
糾錯
最開始沒有理解題意,以為是加上左子樹的所有節點的和,後面跑測試的時候發現結果不對,又重新審了題目,最後改正過來。
執行結果
BFS
DFS