力扣刷题 problem 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对根节点进行判断 没有孩子最小深度即为1
2有孩子,判断是否有左子树,对左子树递归
3判断是否有右子树,对右子树递归
4同时存在左右子树,返回递归值小的那边的值,
5只存在一边子树,返回值大的一侧的值,即返回存在那侧的值。

递归其他案例:

斐波那契数列 汉诺塔问题

汉诺塔问题:
从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数
思路是,n个盘子在A柱,将n-1个盘子移动到b, 第n个盘子到C,再n-1个到c,不贴代码了

贴一个求给定二叉树最小深度问题的力扣答案

//C++
class Solution {
public int minDepth(TreeNode root) {
if(root == null) return 0;
int m1 = minDepth(root.left);
int m2 = minDepth(root.right);
//1.如果左孩子和右孩子有为空的情况,直接返回m1+m2+1
//2.如果都不为空,返回较小深度+1
return root.left == null || root.right == null ? m1 + m2 + 1 : Math.min(m1,m2) + 1;
}
}//作者:reals

猜你喜欢

转载自blog.csdn.net/Frankup/article/details/108437086