# 二叉树最大深度 - 使用层序遍历

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

img

输入: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