给定一个二叉树,找出其最大深度。
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例1:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3
Java解法
思路:
- 实际上就是求二叉树的层级
- 可以通过递归的形式返回当前层级
package sj.shimmer.algorithm.m3_2021;
import sj.shimmer.algorithm.TreeNode;
/**
* Created by SJ on 2021/3/20.
*/
class D54 {
public static void main(String[] args) {
System.out.println(maxDepth(TreeNode.getInstance(new Integer[]{3, 9, 20, null, null, 15, 7})));
}
public static int maxDepth(TreeNode root) {
return maxDepth(0, root);
}
public static int maxDepth(int index,TreeNode node) {
if (node == null) {
return index;
}
return Math.max(maxDepth(index+1, node.left), maxDepth(index+1, node.right));
}
}
官方解
-
深度优先搜索
写法较精炼,理解上多一层
class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { int leftHeight = maxDepth(root.left); int rightHeight = maxDepth(root.right); return Math.max(leftHeight, rightHeight) + 1; } } }
- 时间复杂度:O(n)
- 空间复杂度:O(height) 递归深度
-
广度优先搜索
广度优先条件下,会记录每层数据