二叉樹的最小深度
給定一個二叉樹,找出其最小深度。
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明: 葉子節點是指沒有子節點的節點。
示例
給定二叉樹[3,9,20,null,null,15,7]
。
3
/ \
9 20
/ \
15 7
題解
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var minDepth = function(root) {
if(!root) return 0;
if(root.left === null && root.right !== null) return minDepth(root.right) + 1;
if(root.right === null && root.left !== null) return minDepth(root.left) + 1;
var lh = minDepth(root.left);
var rh = minDepth(root.right);
return Math.min(lh, rh) + 1;
};
思路
使用深度優先搜索的方法,遍歷整棵樹對比最小高度的子樹並記錄,返回最小高度子樹的高度,對於每一個非葉子節點,只需要分別計算其左右子樹的最小葉子節點深度即可,注意題目中定義最小深度是從根節點到最近葉子節點的最短路徑上的節點數量,且葉子節點是指沒有子節點的節點,所以有兩個節點的二叉樹的最小深度是2
。首先如果節點沒有定義,那么就認為其高度為0
並返回0
,對於題目中的要求最小深度是從根節點到最近葉子節點的最短路徑上的節點數量,所以在左子樹不存在右子樹存在的情況下,返回右子樹的最小深度+1
,如果在右子樹不存在左子樹存在的情況下,返回左子樹的最小深度+1
,然后取得左子樹的最小深度與右子樹的最小深度,比較大小,返回較小子樹深度+1
。
每日一題
https://github.com/WindrunnerMax/EveryDay
參考
https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/