1. 题目描述
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.
题目内容为求一棵二叉树的最短路径,所谓最短路径就是到全部叶节点的最短的路径的长度,其中,只有一个根节点路径长度为1。如图所示,最短路径为root到右孩子节点的路径,长度为2。
2. 解题思路
题目为二叉树的深度优先遍历的变种,对于二叉树的遍历首先想到了递归的方式。递归的方式就是将树上的节点划分为不同的种类,并寻找一个递归的出口。
二叉树的节点可以被划分为三种:
第一,左右节点都不为空,如图节点1,递归访问左右节点,返回小的一个。
第二,左右节点都为空,如图节点2,叶节点,返回1。
第三,左右节点有一个不为空,如图节点3,返回下方节点路径长度加当前节点的1。
3. Code
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int minDepth(TreeNode root) {
// 当根节点为null时,return
if (root == null) {
return 0;
}
// 当节点为叶节点时,return 1
else if (root.left == null && root.right == null) {
return 1;
}
// 当节点左右都不为空时,返回左右路径长度短的一个
else if (root.left != null && root.right != null) {
int a = minDepth(root.left) + 1;
int b = minDepth(root.right) + 1;
return a <= b ? a : b;
}
// 当左节点不为空时访问左节点
else if (root.left != null) {
return minDepth(root.left) + 1;
}
// 右节点不为空时访问右节点
else if (root.right != null) {
return minDepth(root.right) + 1;
}
return 0;
}
}