二叉樹的最大深度(maximum-depth-of-binary-tree)

二叉樹的最大深度(maximum-depth-of-binary-tree)

題目

給定一個二叉樹,找出其最大深度。

二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

示例:
給定二叉樹 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

解題方法與思考

遞歸

遞歸設計

在遞歸算法中,遞歸函數的設計非常重要,首先我們要先明確該函數的作用,然後再確定何時結束與何時調用該函數

  • 第一點:明確函數作用
    該函數的作用用一句話概括就是:計算節點的最大深度
    函數輸入:確定的節點
    函數輸出:該節點的最大深度

  • 第二點:何時結束
    當輸入的節點爲空節點時,我們無需繼續計算其子樹的深度,此時可以直接結束遞歸函數,並返回空節點的深度爲 0。

  • 第三點:何時調用
    當輸入節點爲非空節點時,該節點的深度取決於其左右子樹的深度,即:
    Math.max(left, right) + 1;

完整代碼:

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        return Math.max(left, right) + 1;
    }
}

或者寫成

    public int maxDepth(TreeNode root) {
    	if(root == null)return 0;
    	return Math.max(maxDepth(root.left), maxDepth(root.right))+1; 
    }

DFS,深度優先搜索

class Solution {
    int maxLevel = 0;

    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        dfs(root, 1);
        return maxLevel;
    }

    public void dfs(TreeNode root, int level) {
        if (root == null)
            return;
        if (level > maxLevel) maxLevel = level;
        dfs(root.left, level + 1);
        dfs(root.right, level + 1);
    }
}

BFS,廣度優先搜索

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int level = 0;
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            level++;
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.remove();
                if (node.left != null) queue.add(node.left);
                if (node.right != null) queue.add(node.right);
            }
        }
        return level;
    }
}

參考資料

二叉樹的最大深度(maximum-depth-of-binary-tree)
遞歸設計

發佈了171 篇原創文章 · 獲贊 48 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章