# 二叉树最大深度 - 使用层序遍历
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:3
示例 2:
输入:root = [1,null,2]
输出:2
提示:
- 树中节点的数量在
[0, 104]
区间内。 -100 <= Node.val <= 100
# 思路分析:
使用层序遍历,层数即最大深度
# 我们先实现 层序遍历的代码:
LinkedList<HeroNode> s = new LinkedList<>(); | |
// 将 根节点 放入栈中 | |
s.offer(root); | |
// 判断 如果 栈不为空 就循环 | |
while(! s.isEmpty()) { | |
// 弹出 栈顶元素 | |
HeroNode poll = s.poll(); | |
// 打印 从左到右 经过的值 | |
System.out.print(poll + "\t"); | |
// 判断 当前元素的 左边是否为 null 不为 null 就向左走 | |
if(poll.getLeft() != null) { | |
s.offer(poll.getLeft()); | |
} | |
// 判断 当前元素的 右边是否为 null 不为 null 就向右走 | |
if(poll.getRight() != null) { | |
s.offer(poll.getRight()); | |
} | |
} |
打印结果:
1 2 3 4 5 6 7
这样的打印我们并不能看出 二叉树 每层有几个 节点 我们需要使用一个变量来记录 每层二叉树的元素个数 代码如下:
LinkedList<HeroNode> s = new LinkedList<>(); | |
s.offer(root); | |
// 通过 c1 变量来 判断 二叉树每一层的 分界线 | |
while(! s.isEmpty()) { | |
// 注意:这里获取 栈 的大小不能写在 for 循环中 因为 for 循环中 相当于每次循环都调用了 s.size () 了 最后的结果也是 意想之外的 | |
int size = s.size(); | |
for(int i = 0; i < size; i++) { | |
HeroNode poll = s.poll(); | |
System.out.print(poll + "\t"); | |
if(poll.getLeft() != null) { | |
s.offer(poll.getLeft()); | |
} | |
if(poll.getRight() != null) { | |
s.offer(poll.getRight()); | |
} | |
} | |
System.out.println(); | |
} |
打印结果:
1
2 3
4 5 6
7