需求
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:3
示例 2:
输入:root = [1,null,2]
输出:2
概念
二叉树深度:二叉树任意一个节点到根节点的距离,包含自己。前序遍历
二叉树高度:二叉树任意一个节点到叶子节点的距离,包含自己。后续遍历
思路:
上面我们了解了高度与深度的概念,这个题要去是求二叉树的最大深度,正因为树的最大深度等于最大高度,所以我们求高度还是深度就无所谓了。
/**
* 104. 二叉树的最大深度
* 这里整个二叉树的高度等于深度
*/
public class MaxDepth104 {
public int maxDepth(TreeNode root) {
// 最后一层节点后均为null, null的高度为0
if (root == null) return 0;
int leftHigh = maxDepth(root.left);
int rightHigh = maxDepth(root.right);
// 最后一层节点后均为null,返回0,再加1最后一层高度为1
// 每一层+1向上反
return 1 + (leftHigh > rightHigh ? leftHigh : rightHigh);
}
/**
* 递归精简
*/
public int maxDepthJJ(TreeNode root) {
if (root == null) return 0;
return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
}
/**
* 广度遍历/层序遍历
*/
public int maxDepthGd(TreeNode root) {
if(root == null) return 0;
int high = 0;
ArrayDeque<TreeNode> deque = new ArrayDeque<>();
deque.add(root);
while (!deque.isEmpty()) {
int size = deque.size();
high++;
while (size-- > 0) {
TreeNode node = deque.poll();
if(node.left != null) deque.add(node.left);
if(node.right != null) deque.add(node.right);
}
}
return high;
}
}