左葉子之和
題目描述:計算給定二叉樹的所有左葉子之和。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:遞迴
首先, 如果根節點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));
}
}
【每日寄語】 懶惰者等待機遇,勤奮者創造機遇。