【LeetCode】104-二叉樹的最大深度

二叉樹的最大深度

題目

給定一個二叉樹,找出其最大深度。
二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7](示例圖已省略,可點擊頂部標題查看原題),返回它的最大深度 3 。

解法1:迭代法

  • 解題思路
    迭代法的實現和層序遍歷相似,每遍歷完一層,深度+1,當遍歷完成時便可得到最大深度。
    和層序遍歷不同的是,需要記錄下一層的節點個數 levelSize,當 levelSize 爲 0 時,則意味着已遍歷完一層,深度+1。

  • 代碼

class Solution {
     /**
     * 迭代法
     */
     public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        // 每層的節點個數
        int levelSize = 1;
        int maxDepth = 0;
        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();
            levelSize--;

            if (node.left != null) {
                queue.offer(node.left);
            }
            if (node.right != null) {
                queue.offer(node.right);
            }

            // 遍歷完一層,最大深度+1,並設置下一層的節點個數
            if (levelSize == 0) {
                levelSize = queue.size();
                maxDepth++;
            }
        }
        return maxDepth;
    }
}

遞歸法

  • 解題思路
    分別遞歸遍歷左右子樹,因爲不一定是滿二叉樹,所以需要比較左右子樹。

  • 代碼

class Solution {
    /**
     * 遞歸法
     */
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }

        return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章