题目:
求二叉树最小高度/深度
思路:
递归。
求左右子树的最小高度,一直递归到叶子节点为止
/**
* Minimum Depth of Binary Tree
*
* 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.
*/
public class S111 {
public static void main(String[] args) {
}
public int minDepth(TreeNode root) {
if(root == null){
return 0;
}
int minLeft = minDepth(root.left);
int minRight = minDepth(root.right);
if(minLeft!=0 && minRight!=0){ // 还没到叶子节点,可以往左右继续走
return 1 + Math.min(minLeft, minRight);
}else if(minLeft != 0){ // 还没到叶子节点,可以往左继续走
return 1 + minLeft;
}else if(minRight != 0){ // 还没到叶子节点,可以往右继续走
return 1 + minRight;
}else{ // 到了叶子节点
return 1;
}
}
}
如果只有根节点,那高度就是1,如果根节点只有左子树(或者右子树)那么最小高度就是左子树(右子树)的最小高度。如果根节点既有左子树又有右子树,那最小高度就是子树高度最小的那个。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int minDepth(TreeNode root) {
if(root == null){
return 0;
}
if(root.left==null && root.right==null) {
return 1;
}
if(root.left == null) {
return 1 + minDepth(root.right);
}
if(root.right == null) {
return 1 + minDepth(root.left);
}
return 1 + Math.min(minDepth(root.left), minDepth(root.right));
}
}
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int minDepth(TreeNode root) {
if(root == null){
return 0;
}
int[] minDepth = new int[1];
minDepth[0] = Integer.MAX_VALUE;
recMinDep(root, minDepth, 1);
return minDepth[0];
}
public void recMinDep(TreeNode root, int[] minDepth, int depth) {
if(root == null) {
return;
}
if(root.left==null && root.right==null) {
if(depth < minDepth[0]) {
minDepth[0] = depth;
}
return;
}
recMinDep(root.left, minDepth, depth+1);
recMinDep(root.right, minDepth, depth+1);
}
}