问题描述
https://leetcode.com/problems/maximum-depth-of-binary-tree/
解决思路
- 用递归解决DFS(深度优先)问题。递归的最重要的核心点就是两个:1. 递归出口是什么 2. 递归公式是什么。
在这里,递归的出口显然是root没有左右孩子;公式则是比较左右孩子最多的节点作为返回值,而找到左右孩子最多的节点有需要调用maxDepth
函数本身。 - 在使用递归的时候,要假定本身就已经完成了指定的功能,直接拿来递归调用就行了。
问题解惑
一开始不太懂递归,后来临时补了一下递归的基本概念,看了一下斐波那契数列和汉诺塔问题,现在懂一些了,所以不会递归的,可以找视频看看这两个问题,这个就比较好理解了。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}else{
int left = maxDepth(root.left);
int right = maxDepth(root.right);
return Math.max(left, right) + 1;
}
}
}
小感想
递归只要知道怎么用,的确很简单,只要知道递归出口和递归公式,剩下的都是重复性的操作。