感覺一天一道劍指offer題不夠,就再加上一天一道leetcode吧
題目:
Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
給定一棵二叉樹,求出它的最小深度。最小深度是從根節(jié)點到最近的葉節(jié)點的最短路徑上的節(jié)點數(shù)。
思路:
5種情況:空樹;沒有子樹;只有左/右子樹;有倆子樹
本題要注意最小深度與最大深度的區(qū)別:對于最大深度,不需要考慮當(dāng)前子樹是否為單子樹(即一側(cè)子樹深度為0)的情況,即最大深度一直等于左右子樹的最大值;對于最小深度,需要考慮當(dāng)前子樹是否為單子樹的情況,對于雙子樹,其最小深度為左右子樹的最小值,對于單子樹,其最小深度為左右深度的最大值(因為有一側(cè)的子樹為0)。
可采用層序遍歷和深度優(yōu)先遍歷,這題的話層序遍歷效率高一點,因為若是找到一個葉子節(jié)點那么肯定是最短的,無需遍歷所有節(jié)點,貼的代碼用的遞歸
二叉樹操作主要還是利用尾遞歸或者循環(huán)遍歷這兩種思路,進而涉及DFS(主要利用遞歸或者棧實現(xiàn))或者BFS(主要利用隊列實現(xiàn))。剩下的只需要按照這些思路即可。
public class Solution {
public int run(TreeNode root) {
if(root==null)
return 0;
if(root.left==null && root.right==null)
return 1;
if(root.left==null || root.right==null)
return Math.max(run(root.left),run(root.right))+1;
return Math.min(run(root.left),run(root.right))+1;
}
}