问题描述:
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 void XX(BTree *t){
if(t==null) return 0;
if(XX) return XX(t->right);
else return XX(t->left);
}
有的人对于递归想不通,其实你不要想着递归一层层的,用这道题目来解释递归,要求最短长度,当我们到达一个节点的时候,需要判断是否左右子树存在,如果左子树存在右子树不存在,则继续向左子树遍历,如果左子树不存在右子树存在,则继续向右子树遍历,这个向下的过程就是所写的递归 函数,只要向下走就调用递归,而每一次向下走的时候,这个长度就要+1,若左右都存在,则左右都同时向下遍历,那么取最小的结果就行了,于是可以写出:
public int run(TreeNode root) {
if(root==null){
return 0;
}
if(root.left==null&&root.right==null){
return 1;
}
else if(root.left==null){
return run(root.right)+1;
}
else if(root.right==null){
return run(root.left)+1;
}
else{
return Math.min(run(root.right),run(root.left))+1;
}
}