24、二叉樹的最小深度
阿新 • • 發佈:2018-11-16
題目,這幾天都是截圖來描述題目,因為二叉樹不好複製:
我的程式碼
解釋:這道題跟最大深度一樣的,使用遞迴就變得十分簡單,唯一不同的就是當兩邊有一個為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; } }