* 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印。
* 【思路】从根结点开始,先保存结点,再看根结点的左右结点有没有值。
* 有,就将左右值放到集合中;
* 根节点输出后,打印根结点左结点并将根结点左结点的左右结点保存;打印根结点右结点并将根结点右结点的左右结点保存。。

  1. package com.exe4.offer;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. /**
  6. * 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印。
  7. * 【思路】从根结点开始,先保存结点,再看根结点的左右结点有没有值。
  8. * 有,就将左右值放到集合中;
  9. * 根节点输出后,打印根结点左结点并将根结点左结点的左右结点保存;打印根结点右结点并将根结点右结点的左右结点保存。。
  10. *
  11. * @author WGS
  12. *
  13. */
  14. public class PrintBitTree {
  15.  
  16. public static class TreeNode{
  17. int val=0;
  18. TreeNode left=null;
  19. TreeNode right=null;
  20. public TreeNode(int n){
  21. this.val=n;
  22. }
  23. }
  24.  
  25. public void printBitTreeFromTopToBottom(TreeNode rootNode){
  26.  
  27. if(rootNode==null) return;
  28. ArrayList<TreeNode> list=new ArrayList<>();//保存遍历的节点
  29. ArrayList<Integer> data=new ArrayList<>();//保存最后输出的遍历节点
  30. int index=1;
  31.  
  32. list.add(rootNode);
  33.  
  34. while(list.size()>0){
  35. //移除后,下一位即0位。比如8在0位,移除后6即在0位。
  36. //此时6由1位》0位,10由2位变为1位。
  37. //所以下次存储时要在2位存储,不是在3位,所以此处index--
  38. TreeNode temp=list.remove(0);//8
  39. index--;
  40. //data.add(temp.val);//8 6 10...
  41. System.out.print(temp.val+" ");
  42. if(temp.left!=null){
  43. list.add(index++, temp.left);//1位6
  44. }
  45. if(temp.right!=null){
  46. list.add(index++, temp.right);//2位10
  47. }
  48. }
  49.  
  50. }
  51. public static void main(String[] args) {
  52. TreeNode root = new TreeNode(8);
  53. TreeNode node1 = new TreeNode(6);
  54. TreeNode node2 = new TreeNode(10);
  55. TreeNode node3 = new TreeNode(5);
  56. TreeNode node4 = new TreeNode(7);
  57. TreeNode node5 = new TreeNode(9);
  58. TreeNode node6 = new TreeNode(11);
  59.  
  60. root.left = node1;
  61. root.right = node2;
  62. node1.left = node3;
  63. node1.right = node4;
  64. node2.left = node5;
  65. node2.right = node6;
  66.  
  67. new PrintBitTree().printBitTreeFromTopToBottom(root);
  68. System.out.println();
  69. /* for (Integer integer : list) {
  70. System.out.print(integer + " ");*/
  71.  
  72. }
  73. }

剑指offer系列20--从上到下打印二叉树的更多相关文章

  1. 剑指 Offer 32 - II. 从上到下打印二叉树 II

    剑指 Offer 32 - II. 从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,1 ...

  2. 剑指 Offer 32 - III. 从上到下打印二叉树 III

    剑指 Offer 32 - III. 从上到下打印二叉树 III 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印, ...

  3. 剑指 Offer 32 - I. 从上到下打印二叉树

    剑指 Offer 32 - I. 从上到下打印二叉树 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 ...

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

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

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

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

  6. 剑指 Offer 32 - I. 从上到下打印二叉树 + 层次遍历二叉树

    剑指 Offer 32 - I. 从上到下打印二叉树 Offer_32_1 题目描述 解题思路 这题属于简单题,考察的是我们对二叉树以及层次遍历的方法. 这里只需要使用简单的队列即可完成二叉树的层次遍 ...

  7. 每日一题 - 剑指 Offer 32 - I. 从上到下打印二叉树

    题目信息 时间: 2019-06-25 题目链接:Leetcode tag:BFS(广度优先搜索) 队列 难易程度:中等 题目描述: 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印 ...

  8. 剑指offer 23:从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路 按照从左往右从上到下的顺序打印节点,需要我们维护一个队列,这个队列放入元素的顺序是访问队头节点(起始先放入根节点),则若当前 ...

  9. 每日一题 - 剑指 Offer 32 - II. 从上到下打印二叉树 II

    题目信息 时间: 2019-06-25 题目链接:Leetcode tag: 队列 BFS 难易程度:简单 题目描述: 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 示 ...

  10. 剑指offer——33分行从上到下打印二叉树

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.   题解: 使用BFS,按层打印即可 class Solution { public: vector<vector&l ...

随机推荐

  1. Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  2. 如何选择分类器?LR、SVM、Ensemble、Deep learning

    转自:https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms There are a ...

  3. 104. Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  4. keil uvision看厌了么?试试Sublime Text吧!

    之前用 Sublime Text(以下简称 ST )配置了 C/C++ 开发环境,感觉相当不错,作为编辑器的 ST,编辑代码的功能当然是相当棒的,美中不足的是目前只能编译单个文件,但是用来做些小练习也 ...

  5. 单页web应用(SPA)的简单介绍

    单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.J ...

  6. eBay_Relist(退换刊登费)

    如果物品首次刊登结束时没有人中标,或是买家并没有付款完成交易,那么卖家以通过重新刊登的方法来再次销售.如果该物品在第二次刊登时成功售出,且满足eBay的重新刊登退费条件,那么eBay便会退还重新刊登的 ...

  7. JS初学之-点击元素,当前的显示样式,其他变灰色

    点击按钮或者其他元素,当前的变化,其他的不变(比如选项卡按钮,点击当前的变为黄色,其他的不变色),这样的情况我们有两种思路: 1.全部清空,当前添加 for(var i=0;i<aBtn.len ...

  8. makefile--目标搜索(八)

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 在一个较大的工程中,一般会将源代码和二进制文件(.o 文件和可执行文件)安排在不同的目录来进行区 ...

  9. hihoCoder #1301 : 筑地市场 (打表+构造)

    题目大意:问含有4或者7的第k大的正数是多少. 题目分析:1~10.1~100.1~1000...之间的含有4或者7的个数可以求出,这样就可以从高位到地位依次确定这个数的每一位上的值. 代码如下: # ...

  10. Python学习(2)——编码

    今天写了个程序但是在DOS窗口和IDEL窗口调试的结果不一样,有些郁闷~ #!/usr/bin/env python #coding=utf-8 #python version:2.7.3 #syst ...