1. 程式人生 > 其它 >力扣LeetCode #111 二叉樹的最小深度(MinDepth)

力扣LeetCode #111 二叉樹的最小深度(MinDepth)

技術標籤:二叉樹演算法leetcodejava遞迴

- 題目描述

給定一個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。

提示:

  • 葉子節點是指沒有子節點的節點。
  • 樹中節點數的範圍在 [0, 105] 內
  • -1000 <= Node.val <= 1000

來源:LeetCode

- 示例

  • 示例 1:
    輸入:root = [3,9,20,null,null,15,7]
    輸出:2
  • 示例 2:
    輸入:root = [2,null,3,null,4,null,5,null,6]
    輸出:5

- 思路分析

  • 遞迴求出左子樹的最小深度和右子樹的最小深度,再加上根節點的1的即可。
  • 注意空節點不能算作葉子節點,因此當有一側為空時,應該只考慮另一側不為空的深度。

- JAVA實現

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution { public int minDepth(TreeNode root) { if(root == null) return 0; //根節點為空,返回0;只在判斷整個樹的根節點時會用到這一步 else { if(root.left == null && root.right == null) return 1; //說明找到了一個葉子節點 else if(root.left != null && root.right != null) return 1
+Math.min(minDepth(root.left), minDepth(root.right)); else { //當有一側為空時,只考慮另一側 if(root.left == null) return 1 + minDepth(root.right); else return 1 + minDepth(root.left); } } } }