题目

从上往下打印出二叉树的每个节点,同层节点从左至右打印。实际上就是二叉树的层序遍历。这个很经典的题目,层序遍历的话用队列,不熟悉的同学可以去复习一下遍历的七种方法:

  • 递归先序
  • 递归中序
  • 递归后序
  • 非递归先序
  • 非递归中序
  • 非递归后序
  • 层序遍历

本科时候用cpp实现过一个版本,有兴趣的同学可以看下。

https://blog.csdn.net/hit1110...

本文模拟一下层序遍历

题解

            8
           /  \
          6   10
         / \  / \
        5  7 9  11
  1. 先把根节点入队
  2. 队列中的节点,如果有左子树和右子树,分别入队;
  3. 打印当前节点

队列中的元素分别为:

1. 8 inQueue; 【8】
2. 8 deQueue, 打印; 6 inQueue; 10 inQueue; 【6, 10】
3. 6 deQueue, 打印; 5 inQueue, 7 inQueue; 【10, 5, 7】
4. 10 deQueue, 打印; 9 inQueue, 11 inQueue; 【5, 7, 9, 11】
5. 5 deQueue, 打印; 【7, 9, 11】
5. 7 deQueue, 打印; 【9, 11】
5. 9 deQueue, 打印; 【11】
5. 11 deQueue, 打印;【】

代码

import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;

public class Solution {
     public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> result = new ArrayList<>();
        // 异常条件判断
        if (root == null) {
            return result;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()) {
            TreeNode current = queue.poll();
            TreeNode left = current.left;
            TreeNode right = current.right;
            if (left != null) {
                queue.offer(left);
            }
            if (right != null) {
                queue.offer(right);
            }
            result.add(current.val);
        }
        return result;
    }
}


Leetcode名企之路


Acceml
284 声望79 粉丝

码蹄疾,毕业于哈尔滨工业大学。