秦怀杂货店

General Store

  • 首页
  • 文章归档
  • 标签
  • 分类
  • 关于页面

  • 搜索
随便聊聊 数据结构 小游戏 数据库 Docker Springboot 系统设计 雪花算法 分布式 海量ip 最长回文子串 算法 面试题 线程池 多线程 线程 java学习 布隆过滤器 github 架构设计 docsify Git JVM LeetCode 杂货思考 设计模式 Lambda native isAssignableFrom 反射 剑指Offer mybatis SPI JDBC 编程工具 Java基础 集合

剑指Offer【22】-- 从上往下打印二叉树

发表于 2020-11-28 | 分类于 剑指Offer | 0 | 阅读次数 227

[toc]

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路以及解答

主要的思路是借助队列,先把当前元素放进队列,然后不断取出元素,取出元素的时候,同时处理其左子树和右子树,将其放到队列中。直到队列是空的。

总所周知,队列的特点是先进先出,也就是我们可以保证,根节点先进去,然后根节点取出来,打印根节点,同时如果根节点的左节点不为空,则将左节点放进去队列,右节点如果不为空,同样放进去队列中,然后又取出队列的第一个元素,打印,将它的左右节点不为空的加到队列中,这样循环下去即可...

PS:LinkedList是双向队列,queue.add()是在队列后面添加元素,queue.pollFirst()是将第一个元素取出队列。

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
/**
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> results = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        if (root != null) {
            queue.add(root);
            while (!queue.isEmpty()) {
                TreeNode treeNode  = ((LinkedList<TreeNode>) queue).pollFirst();
                results.add(treeNode.val);
                if(treeNode.left!=null){
                    ((LinkedList<TreeNode>) queue).add(treeNode.left);
                }
                if(treeNode.right!=null){
                    ((LinkedList<TreeNode>) queue).add(treeNode.right);
                }
            }
        }
        return results;
    }
}

【作者简介】:
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。

此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

  • 本文作者: 秦怀杂货店
  • 本文链接: http://aphysia.cn/archives/jianzhioffer22
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 随便聊聊 # 数据结构 # 小游戏 # 数据库 # Docker # Springboot # 系统设计 # 雪花算法 # 分布式 # 海量ip # 最长回文子串 # 算法 # 面试题 # 线程池 # 多线程 # 线程 # java学习 # 布隆过滤器 # github # 架构设计 # docsify # Git # JVM # LeetCode # 杂货思考 # 设计模式 # Lambda # native # isAssignableFrom # 反射 # 剑指Offer # mybatis # SPI # JDBC # 编程工具 # Java基础 # 集合
剑指Offer【21】--栈的压入,弹出序列
Mybatis【2.2】-- Mybatis关于创建SqlSession源码分析的几点疑问?
  • 文章目录
  • 站点概览
秦怀杂货店

秦怀杂货店

纵然缓慢,驰而不息。

145 日志
19 分类
37 标签
Github E-mail
Creative Commons
0%
© 2022 秦怀杂货店
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4