Fork me on GitHub

把二叉树打印成多行

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
此道题目可以跟  按之字形顺序打印二叉树: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 的方法:(注:图片太小,点击图片移动。)

 

 
posted @ 2019-07-18 10:28  gentleKay  阅读(242)  评论(0编辑  收藏  举报