LeetCode-404-左葉子之和

雄獅虎豹發表於2021-10-09

左葉子之和

題目描述:計算給定二叉樹的所有左葉子之和。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:遞迴

首先, 如果根節點rootnull或者只有一個節點,則說明沒有葉子節點,直接返回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));
    }
}
【每日寄語】 懶惰者等待機遇,勤奮者創造機遇。

相關文章