题目描述

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

题目代码

/**
* 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
* Created by YuKai Fan on 2018/9/8.
*/
public class PrintTreeFromTopBottom {
public static void main(String[] args) {
TreeNode a = new TreeNode(2);
a.left = new TreeNode(4);
a.right = new TreeNode(6);
a.left.left = new TreeNode(7);
a.left.right = new TreeNode(9);
a.right.right = new TreeNode(21);
a.right.left = new TreeNode(14);
ArrayList<Integer> list = printTreeFromTopBottom(a);
System.out.println(list);
}
/*
思路是用arraylist模拟一个队列来存储相应的TreeNode,每次遍历将树的左节点,和右节点放入队列中
*/
public static ArrayList<Integer> printTreeFromTopBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
ArrayList<TreeNode> queue = new ArrayList<>();
if (root == null) {
return list;
}
queue.add(root);
while (queue.size() != 0) {
TreeNode temp = queue.remove(0);
if (temp.left != null) {
queue.add(temp.left);
}
if (temp.right != null) {
queue.add(temp.right);
}
list.add(temp.val);
}
return list;
}
}
/**
* Created by YuKai Fan on 2018/9/3.
*/
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
} }

题目延伸

从上往下打印出“之字形”二叉树的每个节点

/*
从上往下打印“之字形”二叉树
*/
public static ArrayList<ArrayList<Integer>> printTreeFromTopBottom2(TreeNode root) {
//result用来存储结果
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
//创建两个辅助栈,分别存放奇数行和偶数行的节点
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>(); //创建集合,存放每一行的节点值
ArrayList<Integer> list = new ArrayList<>();
boolean flag = true;
TreeNode node;
stack1.push(root);
while (!stack1.isEmpty() || !stack2.isEmpty()) {
//奇数行,从左往右入栈stack2
if (flag) {
while (!stack1.isEmpty()) {
node = stack1.pop();
list.add(node.val);
if (node.left != null) {
stack2.push(node.left);
}
if (node.right != null) {
stack2.push(node.right);
}
if (stack1.isEmpty()) {
result.add(list);
list = new ArrayList<>();
}
}
} else {
//偶数行,将入栈的奇数行出栈到stack1
while (!stack2.isEmpty()) {
node = stack2.pop();//由于后进先出,所以弹出的是右子树
list.add(node.val);//将右节点存入
if (node.right != null) {
stack1.push(node.right);
}
if (node.left != null) {
stack1.push(node.left);
}
if (stack2.isEmpty()) {
result.add(list);
list = new ArrayList<>();
}
}
}
flag = !flag;
}
return result;
}

java编程基础——从上往下打印二叉树的更多相关文章

  1. 剑指Offer-从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路 使用两个队列一个存放节点,一个存放值.先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子 ...

  2. 【Java】 剑指offer(32) 从上往下打印二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 (一)从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺 ...

  3. 剑指offer——从上往下打印二叉树

    题目描述:从上到下打印二叉树的节点,同一层的从左到右打印 思路:采用队列来存储单层的节点,然后通过删除队列的头结点操作,依次遍历每一层. 代码为: import java.util.ArrayList ...

  4. 剑指offer-第四章解决面试题的思路(从上往下打印二叉树)

    题目:从上往下打印二叉树的每一个节点,同一层的节点按照从左到右的顺序打印 思路:这是一个层序遍历的问题,因此要借用到队列.我们可以在打印第一个节点的同时将这个节点的左右子节点都放入队列,同样打印左右子 ...

  5. 剑指Offer(二十二):从上往下打印二叉树

    剑指Offer(二十二):从上往下打印二叉树 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

  6. 【剑指Offer】面试题32 - III. 从上到下打印二叉树 III

    题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,nu ...

  7. 【剑指Offer】面试题32 - II. 从上到下打印二叉树 II

    题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...

  8. 剑指 Offer 32 - III. 从上到下打印二叉树 III + 双端队列使用 + 蛇形打印层次遍历序列 + 正倒序输出

    剑指 Offer 32 - III. 从上到下打印二叉树 III Offer_32_3 题目详情 题解分析 本题我想的比较复杂,其实题目的要求只是需要遍历的结果逆序和正序交替,这个其实可以使用Coll ...

  9. 剑指 Offer 32 - II. 从上到下打印二叉树 II + 层次遍历二叉树 + 按层存储

    剑指 Offer 32 - II. 从上到下打印二叉树 II Offer_32 题目描述: 题解分析: 这道题我一开始想到的解决方法较粗暴,就是使用两个变量来记录当前层的节点数和下一层的结点数. 以上 ...

随机推荐

  1. 浅析HTTP协议get请求与post请求

    一.HTTP简介 1. HTTP协议:(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则(报文格式). 2.报文: ...

  2. STP-18-Port-Channl上的负载均衡

    Ether Channel通过在多条链路上传输多个数据帧,增加了可用带宽.一个以太网帧总是通过一个Ether Channel中的一条链路传输.针对数据帧地址字段执行散列计算能够产生一个编号,标识这个数 ...

  3. redis安全配置

    禁用或者重命名危险命令 FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPO ...

  4. PowerDesigner如何将字段的注释显示出来

    选定一个编辑的表,右键- >Properties- >Columns- >Customize Columns and Filter(或直接用快捷键Ctrl+U)- >Comme ...

  5. jsonp——使用公共接口获取数据

    demo: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8 ...

  6. 双层列表 datagrid里属性

    frozenColumns: [ [{ title: "姓名"}] ], columns: [ [{"title":"延时原因"}], [{ ...

  7. Spring那些不得不知的细节

    1.SpringMVC拦截器的url-pattern和RequestMapping 案例: url-pattern为/rest/* http请求为:/rest/query/id 那么requestMa ...

  8. HDU 5452——Minimum Cut——————【树链剖分+差分前缀和】ACdream 1429——Diversion——————【树链剖分】

    Minimum Cut Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Tota ...

  9. 《大话设计模式》num02---策略模式

    2018年01月22日 22:04:57 独行侠的守望 阅读数:72更多个人分类: 设计模式编辑版权声明:本文为博主原创文章,转载请注明文章链接. https://blog.csdn.net/xiao ...

  10. EL_JSTL

    EL(Expression Language)EL表达式 作用:在JSP中消灭java代码 语法: "${ }" 用法:参考jsp页面 //Servlet中,: User user ...