題目描述:給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明:葉子節點是指沒有子節點的節點。
示例:給定二叉樹 [3, 9, 20, null, null, 15, 7]
返回它的最大深度3。
整棵二叉樹的深度等於其左子樹深度(leftheight)和右子樹深度(rightheight),兩者中的較大值加1(加1即加上根節點)
max(leftheight, rightheight) + 1
而左子樹和右子樹的最大深度可以以同樣的方式進行計算。因此可以先遞迴計算出其左子樹和右子樹的最大深度,再求得當
前二叉樹的最大深度。遞迴在訪問到空節點時退出。
/**
* definition for a binary tree node.
* public class treenode
* }*/
class solution
else}}
複雜度分析時間複雜度:o(n),其中n為二叉樹節點的個數。每個節點在遞迴中只被遍歷一次。
空間複雜度:o(height),其中height表示二叉樹的高度。遞迴函式需要棧空間,棧空間取決於遞迴的深度,因此空間複雜度等
價於二叉樹的高度。
最壞情況下,樹是完全不平衡的,例如每個節點只剩下左子節點,遞迴將會呼叫n次,此時空間複雜度為o(n)。
最好情況下,樹是完全平衡的,樹的高度為log(n),此時時間複雜度為o(log(n)).
對廣度優先搜尋進行修改,當前廣度優先搜尋佇列裡存放的是當前層的所有節點。每次拓展下一層的時候,將佇列裡所有節
點都拿出來進行拓展。用乙個變數count來維護拓展的次數,該二叉樹的深度即為result。
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
queuequeue = new linkedlist();
queue.offer(root);
int count = 0;
while(!queue.isempty())
if(temp.right != null)
} count++;
}return count;}}
複雜度分析時間複雜度:o(n),其中n為二叉樹節點的個數,每個節點僅被訪問一次。
空間複雜度:此方法空間的消耗取決於佇列儲存的元素數量,在最壞情況下回達到o(n),最優情況下為o(1)。
104 二叉樹的最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 思路 使用遞迴,遍歷左子樹右子樹,使用max找出最大的深度。defin...
104 二叉樹的最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 解題思路 採用dfs進行深度搜尋,一行算一次搜尋,輸出結果長度即可。...
104 二叉樹的最大深度
每日leetcode 24 二叉樹的最大深度 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 這道題遞迴到最後葉節點...