1. 程式人生 > 實用技巧 >LeetCode111. 二叉樹的最小深度

LeetCode111. 二叉樹的最小深度

☆☆☆方法1:遞迴,需要注意二叉樹退化成連結串列的情況,要單獨處理沒有左子樹或沒有右子樹的特殊情況

  方法2:BFS。二叉樹層序遍歷

☆☆☆方法3:DFS

class Solution {
    int min = Integer.MAX_VALUE;
    public int minDepth(TreeNode root) {
        /**
         *  方法1:遞迴
         *      需要注意二叉樹退化成連結串列的特殊情況。
         */
        if (root == null) return 0;
        int left = minDepth(root.left);
        
int right = minDepth(root.right); // 如果left和right都為0,說明是葉子節點,返回1即可, // 如果left和right有一個為0,說明其中一個子節點為空,此時返回它另一個子節點的最小深度+1即可。 // 如果left和right都不為0,說明左右孩子都不為空,返回最小深度的+1即可。 return (left == 0 || right == 0) ? 1 + left + right : Math.min(left,right) + 1; /** * 方法2:二叉樹層序遍歷
*/ /* if (root == null) return 0; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int level = 0; while (!queue.isEmpty()) { int size = queue.size(); level ++; for (int i = 0; i < size; i++) { TreeNode cur = queue.poll(); if (cur.left == null && cur.right == null) return level; if (cur.left != null) queue.offer(cur.left); if (cur.right != null) queue.offer(cur.right); } } return -1;
*/ /** * 方法3:DFS */ /* if (root == null) return 0; dfs(root, 1); // 初始化為第一層 return min; */ } private void dfs(TreeNode root, int level) { if (root == null) return; // 每次到葉子節點時 更新min if (root.left == null && root.right == null) { min = Math.min(min, level); } dfs(root.left, level + 1); dfs(root.right, level + 1); } }