jz55-Ⅰ.二叉树的深度

题目描述

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:

给定二叉树 [3,9,20,null,null,15,7],

1
2
3
4
5
  3
/ \
9 20
/ \
15 7

题解

BFS

之前做层序遍历的相关题目时有记录过当前遍历所在层数, 那么直接把这个值拿来用就是最大的深度了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public int maxDepth(TreeNode root) {
if (root == null)
return 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int depth = 0;

while (!queue.isEmpty()) {
int levelNums = queue.size();
for (int i = 0; i < levelNums; i++) {
TreeNode temp = queue.poll();
if (temp.left != null)
queue.add(temp.left);
if (temp.right != null)
queue.add(temp.right);
}
depth++;
}
return depth;
}

DFS

关键点: ** 树的深度和其左右子树的深度之间有着重要关系. 显然, **此树的深度 等于 左子树深度右子树深度 中的 最大值 +1

  1. 终止条件:root 为空,说明已越过叶节点,因此返回 深度 0 。
  2. *递归过程: * 本质上是对树做后序遍历
    1. 计算节点 root左子树的深度 ,即调用 maxDepth(root.left)
    2. 计算节点 root右子树的深度 ,即调用 maxDepth(root.right)
  3. 返回值: 返回 此树的深度 ,即 max(maxDepth(root.left), maxDepth(root.right)) + 1

1
2
3
4
5
6
class Solution {
public int maxDepth(TreeNode root) {
if(root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}
-------------本文结束感谢您的阅读-------------
可以请我喝杯奶茶吗