* 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印。
* 【思路】从根结点开始,先保存结点,再看根结点的左右结点有没有值。
* 有,就将左右值放到集合中;
* 根节点输出后,打印根结点左结点并将根结点左结点的左右结点保存;打印根结点右结点并将根结点右结点的左右结点保存。。
package com.exe4.offer; import java.util.ArrayList; /**
* 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印。
* 【思路】从根结点开始,先保存结点,再看根结点的左右结点有没有值。
* 有,就将左右值放到集合中;
* 根节点输出后,打印根结点左结点并将根结点左结点的左右结点保存;打印根结点右结点并将根结点右结点的左右结点保存。。
*
* @author WGS
*
*/
public class PrintBitTree { public static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int n){
this.val=n;
}
} public void printBitTreeFromTopToBottom(TreeNode rootNode){ if(rootNode==null) return;
ArrayList<TreeNode> list=new ArrayList<>();//保存遍历的节点
ArrayList<Integer> data=new ArrayList<>();//保存最后输出的遍历节点
int index=1; list.add(rootNode); while(list.size()>0){
//移除后,下一位即0位。比如8在0位,移除后6即在0位。
//此时6由1位》0位,10由2位变为1位。
//所以下次存储时要在2位存储,不是在3位,所以此处index--
TreeNode temp=list.remove(0);//8
index--;
//data.add(temp.val);//8 6 10...
System.out.print(temp.val+" ");
if(temp.left!=null){
list.add(index++, temp.left);//1位6
}
if(temp.right!=null){
list.add(index++, temp.right);//2位10
}
} }
public static void main(String[] args) {
TreeNode root = new TreeNode(8);
TreeNode node1 = new TreeNode(6);
TreeNode node2 = new TreeNode(10);
TreeNode node3 = new TreeNode(5);
TreeNode node4 = new TreeNode(7);
TreeNode node5 = new TreeNode(9);
TreeNode node6 = new TreeNode(11); root.left = node1;
root.right = node2;
node1.left = node3;
node1.right = node4;
node2.left = node5;
node2.right = node6; new PrintBitTree().printBitTreeFromTopToBottom(root);
System.out.println();
/* for (Integer integer : list) {
System.out.print(integer + " ");*/ }
}