题目:求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
示例:
输入:{1,2,3,4,5}
返回值:2
我们可以使用递归来求解给定二叉树的最小深度。
function minDepth(root) { //核心代码
if (root === null) {
return 0;
}
if (root.left === null && root.right === null) {
return 1;
}
if (root.left === null) {
return minDepth(root.right) + 1;
}
if (root.right === null) {
return minDepth(root.left) + 1;
}
return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
}
/*
* function TreeNode(x) {
* this.val = x;
* this.left = null;
* this.right = null;
* }
*/
/**
*
* @param root TreeNode类
* @return int整型
*/
function run(root) {
return minDepth(root)
}
module.exports = {
run: run,
};
核心代码的思路如下:
如果根节点为空(也就是说,树是空的),那么深度就是0。
如果根节点没有左子节点也没有右子节点(也就是说,根节点是叶子节点),那么深度就是1。
如果根节点没有左子节点,那么最小深度就是在右子树的最小深度上加1。
如果根节点没有右子节点,那么最小深度就是在左子树的最小深度上加1。
如果根节点既有左子节点又有右子节点,那么最小深度就是在左子树和右子树的最小深度中的较小值上加1。
这个函数使用了递归,因此它会遍历树的所有部分。在每个递归步骤中,它都会找到当前子树的最小深度,然后将这个值加1(因为需要算上当前的根节点)。最终,当函数返回到最初的根节点时,它将找到整棵树的最小深度。