把二叉树打印成多行
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
此道题目可以跟 按之字形顺序打印二叉树:https://www.cnblogs.com/strive-19970713/p/11205526.html 进行比较学习。
按之字形顺序打印二叉树:使用的是 栈; 出栈,入栈;先入后出,后入先出。
把二叉树打印成多行:使用的 链表;我用的方法是 固定删除编号为0 的数。
/** * * @author gentleKay * 题目描述 * 从上到下按层打印二叉树,同一层结点从左至右输出。 * 每一层输出一行。 */ public class Main58 { public static void main(String[] args) { // TODO Auto-generated method stub TreeNode root = new TreeNode(8); root.left = new TreeNode(6); root.left.left = new TreeNode(5); root.left.right = new TreeNode(7); root.right = new TreeNode(10); root.right.left = new TreeNode(9); root.right.right = new TreeNode(11); System.out.println(Main58.Print(root)); } public static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public static ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list = new ArrayList<>(); if (pRoot == null) { return list; } ArrayList<TreeNode> tn1 = new ArrayList<>(); tn1.add(pRoot); ArrayList<TreeNode> tn2 = new ArrayList<>(); while(!tn1.isEmpty() || !tn2.isEmpty()){ if (!tn1.isEmpty()) { ArrayList<Integer> aList2=new ArrayList<Integer>(); while(!tn1.isEmpty()) { TreeNode p = tn1.get(0); aList2.add(p.val); tn1.remove(0); if(p.left!=null) tn2.add(p.left); if(p.right!=null) tn2.add(p.right); } list.add(aList2); }else { ArrayList<Integer> aList2=new ArrayList<Integer>(); while(!tn2.isEmpty()) { TreeNode p = tn2.get(0); aList2.add(p.val); tn2.remove(0); if(p.left!=null) tn1.add(p.left); if(p.right!=null) tn1.add(p.right); } list.add(aList2); } } return list; } }
ArrayList 的方法:(注:图片太小,点击图片移动。)