【牛客-剑指offer-数据结构篇】JZ32 从上往下打印二叉树 Java实现

文章目录

  • 1 题目链接
  • 2 题目
  • 3 思路(BFS+队列)
  • 4 代码
  • 5 队列相关知识(参考)


1 题目链接

https://www.nowcoder.com/exam/oj/ta?page=1&tpId=13&type=13

2 题目

【牛客-剑指offer-数据结构篇】JZ32 从上往下打印二叉树 Java实现_第1张图片
【牛客-剑指offer-数据结构篇】JZ32 从上往下打印二叉树 Java实现_第2张图片

3 思路(BFS+队列)

广度优先搜索,从根节点开始,把根节点加入队列【队列的特点是:先进先出

随后,进入while循环,针对队列中的每一个节点,具体的操作是:

  1. 取出队列中的第一个节点,将其节点的值加入ArrayList

  2. 检查该节点有没有左子节点,如果有,加入队列

  3. 检查该节点有没有右子节点,如果有,加入队列

不断重复上面的三步,直到队列中没有节点,循环结束,返回arraylist

4 代码

import java.util.*;
import java.util.ArrayList;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<>();
        if (root == null) {
            return list;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);

        TreeNode tmp;
        while (!queue.isEmpty()) {
            tmp = queue.poll();
            list.add(tmp.val);
            if (tmp.left != null) {
                queue.offer(tmp.left);
            }
            if (tmp.right != null) {
                queue.offer(tmp.right);
            }
        }
        return list;

    }
}

5 队列相关知识(参考)

  • Java中Queue的基本操作

  • JAVA队列(Queue)用法附实例讲解

  • ArrayList、ArrayDeque与LinkedList区别

你可能感兴趣的:(剑指offer,java,数据结构,开发语言,算法)