給定乙個二叉樹,找出其最小深度。
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明:葉子節點是指沒有子節點的節點。
示例 1:
輸入:root = [3,9,20,null,null,15,7]
輸出:2
示例 2:
輸入:root = [2,null,3,null,4,null,5,null,6]
輸出:5
首先可以想到使用深度優先搜尋的方法,遍歷整棵樹,記錄最小深度。
對於每乙個非葉子節點,我們只需要分別計算其左右子樹的最小葉子節點深度。這樣就將乙個大問題轉化為了小問題,可以遞迴地解決該問題
/**
* definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class solution
int leftdepth=mindepth(root->left);
int rightdepth=mindepth(root->right);
if(leftdepth==0)
if(rightdepth==0)
return min(leftdepth,rightdepth)+1;}};
時間複雜度:o(n),其中 n 是樹的節點數。對每個節點訪問一次。
空間複雜度:o(h),其中 h 是樹的高度。空間複雜度主要取決於遞迴時棧空間的開銷,最壞情況下,樹呈現鏈狀,空間複雜度為o(n)。平均情況下樹的高度與節點數的對數正相關,空間複雜度為o(logn)。
111 二叉樹的最小深度
給定乙個二叉樹,找出其最小深度。最小深度是從根節點到最近葉節點的最短路徑的節點數量。解題思路 這題我想了很久。大概還是對遞迴不太熟悉吧。下面講解一下遞迴的思路 1.如果根節點是null,說明沒有深度。2.如果節點的左右兒子都不存在,說明只有自己,節點深度為1.3.如果節點沒有左兒子,但是有右兒子怎麼...
111 二叉樹的最小深度( )
給定乙個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 920 157返回它的最小深度 2.注意 它是到最近的葉子節點,要多考慮根節點 class solution ...
111 二叉樹的最小深度
給定乙個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最小深度 2.思路 求樹深用dfs,遞迴遍歷左子樹右子樹,取最小的深度。defini...