题目:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点
思路:
第一种,自上而下递
维护一个深度变量,遍历到叶子节点时更新最小值
第二种,自下而上归
- 空树:深度为 0。
- 单边路:必须走有孩子的那一边(不能把空的那一边当成终点)。
- 双边路:哪边近走哪边(取最小值)。
代码:
var minDepth = function (root) {
let res = Infinity;
// let depth = 1;
function traverse(node, depth) {
if (!node || depth >= res) return;//优化
depth++;
if (node.left === null && node.right === null) {
res = Math.min(depth, res);
return;
}
traverse(node.left, depth);
traverse(node.right, depth);
// depth--;
}
traverse(root, 0);
return root ? res : 0;
};
思路二
var minDepth = function(root) {
if(!root){
return 0;
}
//遇到非叶子节点
if(root.right === null){
return minDepth(root.left) + 1;
}
if(root.left === null){
return minDepth(root.right) + 1;
}
return Math.min(minDepth(root.left),minDepth(root.right)) + 1;
};