* 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 } 74 }