持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
前言
今天我们还是来看关于数据结构二叉树的题目,充分的了解二叉树。
《二叉树的最小深度》这道题的难度级别属于简单级别,也就是基本的操作类型的题目。
算法题:二叉树的最小深度
从题目的描述来看,我们可以获取每一个节点不为空的路径,直到当前节点的左右子节点都为空时,才算得上是终止,此时获得的深度层数和其他分支的比较后,得到最小的一个值,就是我们最后要的结果值。
在解题的过程中,还要考虑两个特殊的情况。
第一,判断该节点是否为空,如果为空的话,自然也就是0了。
第二,判断两个子节点是否都为空,如果都为空的情况,那也就不用继续下去了,因为当前节点就是最底层的了。
代码展示
本次代码使用的是递归方式不断递归到最后一个符合要求的节点,并且得出最小的终止层数。
/**
* 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;
* }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
//为空为0
if (root == null) {
return 0;
}
//有一侧为空直接输出1
if (root.left == null && root.right == null) {
return 1;
}
int z = 10001;
if (root.left != null) {
z = Math.min(minDepth(root.left), z);
}
if (root.right != null) {
z = Math.min(minDepth(root.right), z);
}
return z + 1;
}
}
执行结果:
第一次理解错了题目,失败了一次。
很不理想,但是这和官方题解思路是一样的,只能说更多的牛人在前面。
总结
跟我一起说,遇到处理二叉树,那就是用递归最好了,欢迎大家关注我的刷题专栏。