LeetCode-404-左葉子之和
阿新 • • 發佈:2021-10-03
左葉子之和
題目描述:計算給定二叉樹的所有左葉子之和。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/sum-of-left-leaves/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:遞迴
首先, 如果根節點root為null或者只有一個節點,則說明沒有葉子節點,直接返回0;
否則,新增一個遞迴方法recursive,有2個引數,分別是當前節點的左右子節點,flag為左右子節點的標識,遞迴過程如下:
- 呼叫遞迴方法recursive,引數分別為root的左右子節點,flag
為相應的標識;- 判斷遞迴方法中的root如果為null,則返回;
- 如果root沒有左右子節點且且flag標識為左子節點,則將root的值加到結果result中;
- 否則,遞迴呼叫recursive,引數分別為root的左右子節點,flag為相應的標識。
最後,返回result即為所有的左葉子節點之和。
import com.kaesar.leetcode.TreeNode; /** * @Author: ck * @Date: 2021/9/29 7:33 下午 */ public class LeetCode_404 { /** * 葉子之和 */ public static int result = 0; public static int sumOfLeftLeaves(TreeNode root) { if (root == null || (root.left == null && root.right == null)) { return 0; } recursive(root.left, true); recursive(root.right, false); return result; } /** * 遞迴方法 * * @param root * @param flag true表示是左子節點;false表示是右子節點 */ public static void recursive(TreeNode root, boolean flag) { if (root == null) { return; } if (root.left == null && root.right == null && flag) { result += root.val; } recursive(root.left, true); recursive(root.right, false); } public static void main(String[] args) { TreeNode root = new TreeNode(3); root.left = new TreeNode(9); root.right = new TreeNode(20); root.right.left = new TreeNode(15); root.right.right = new TreeNode(7); // 期望返回值: 24 System.out.println(sumOfLeftLeaves(root)); } }
【每日寄語】 懶惰者等待機遇,勤奮者創造機遇。