1. 程式人生 > >24、二叉樹的最小深度

24、二叉樹的最小深度

題目,這幾天都是截圖來描述題目,因為二叉樹不好複製:
在這裡插入圖片描述

我的程式碼
解釋:這道題跟最大深度一樣的,使用遞迴就變得十分簡單,唯一不同的就是當兩邊有一個為0時,需要去深度較大的那個,比如這個測試用例 [1,2]那麼結果是2而不是0,因為要求的是到達根節點的最小,右邊沒有這樣就不能以0深度計算了,這點需要注意。。。

public static int minDepth(TreeNode root) {
	 		if(root == null){
	 			return 0;
	 		}else {
				int left = minDepth(root.left);
				int right = minDepth(root.right);
				if(left == 0){
					return right + 1;
				}else if (right == 0) {
					return left + 1;
				}else {
					return left > right ? right +1 :left + 1;
				}
				
				
			}
	 		
	 		

排名比較高的程式碼,我又有點懵逼,跟我的感覺沒啥區別啊

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    /**
	 * 空樹,最小深度為0
	 * <p>
	 * 左右子樹都為空,最小深度為1
	 * <p>
	 * 左右子樹不都為空,左右子樹中有空樹的情況,最小深度一定是在非空樹中產生,因為最小深度定義為到最近葉子節點的深度。一旦左右子樹有空的情況,這邊的深度就可以置為正無窮,表示最小深度不可能再這裡產生。然後分別計算左右子樹的最小深度,使用遞迴策略。
	 * 
	 * @param root
	 * @return
	 */
	public int minDepth(TreeNode root) {
		if (root == null) {
			return 0;
		}
		if (root.left == null && root.right == null) {
			return 1;
		}
		int leftHeight = 1;
		int rightHeight = 1;
		if (root.left != null) {
			leftHeight = minDepth(root.left);
		} else {
			leftHeight = Integer.MAX_VALUE;
		}
		if (root.right != null) {
			rightHeight = minDepth(root.right);
		} else {
			rightHeight = Integer.MAX_VALUE;
		}
		return Math.min(leftHeight, rightHeight) + 1;
	}
}