(Java)leetcode-104 Maximum Depth of Binary Tree (二叉樹的最大深度)

題目描述

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

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

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

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

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

本題可參考leetcode-559 Maximum Depth of N-ary Tree (N叉樹的最大深度)

思路1:BFS

求深度,就是求共有幾層,自然就想到 層序遍歷 ,關鍵就是用 隊列 來保存樹的層級順序,節點出隊則將其孩子入隊,用for循環來保證將某一層的節點全部出隊,此時表明同一層的節點都處理完畢,層數+1。

// BFS
class Solution {
    public int maxDepth(TreeNode root) {
    	if (root == null) return 0;

    	Queue<TreeNode> queue = new LinkedList<>();
    	queue.offer(root);
    	int depth = 0;

    	
    	while (!queue.isEmpty()) {
    		// 該層的節點數
    		int size = queue.size();

    		// 遍歷該層所有節點
    		for(int i = 0; i < size; i++) {
    			// 隊頭出隊同時將其子節點都入隊
    			TreeNode current = queue.poll();
    			if (current.left != null) queue.offer(current.left);
    			if (current.right != null) queue.offer(current.right);
    		}
    		// 該層節點處理完畢,層數+1
    		depth++;
    	}

    	return depth;	
    }
}

執行用時:1 ms, 在所有 Java 提交中擊敗了17.49%的用戶
內存消耗:39.8 MB, 在所有 Java 提交中擊敗了5.75%的用戶

思路2:DFS

二叉樹最大的深度 = 左右子樹的最大深度+1
本問題的子問題,就是求子樹的最大深度,由此可以得到遞歸的解法。

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

執行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的用戶
內存消耗:39.9 MB, 在所有 Java 提交中擊敗了5.75%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章