题目
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
分析
原始结构体代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
题目要求大概就是找到这个树的最短分支,那么思想就是向下遍历,找到没有子节点的节点后,记录到数组里,然后返回到上一个分支节点里,找另外一条路的最深长度,具体代码里可以用while循环,判断条件是左右子树为空,但是这里有一个问题是,测完一个子树深度后,如何返回到回去的分支节点,难以解决之下,于是换一个思路
while循环,其实有替代的办法,就是递归,mindepth这个函数,可以用在二叉树上做递归,那么如果求根节点的左右子树里短的,就求min(左子树,右子树),代码如下,由于具体长度是点数而非线数,所以还要加1
return Math.min(minDepth(root.left),minDepth(root.right))+1;
此外还要判断一个根为空,那就是最小0长度
if(root==null){
return 0;
}
还有一个要注意的就是当左为空时,那它加1,就会返回1,但实际最短是0
if (root.left == null)
return minDepth(root.right) + 1;
如果左不为空,就返回左最短
return minDepth(root.left) + 1;
最后结果