• 把二叉树打印成多行


    题目描述

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

     
  • 相关阅读:
    web前端开发面试被虐篇(一)
    JSON字符串 拼接与解析
    IntelliJ IDEA 2017 Dubbo Elastic-job Redis Zookeeper RabbitMQ FastDFS MyCat 简介以及部分实现(三)
    IntelliJ IDEA 2017 MySQL5 绿色版 Spring 4 Mybatis 3 配置步骤详解(二)
    IntelliJ IDEA 2017 JDK Tomcat Maven 配置步骤详解(一)
    简单练习
    C#实现上传/下载Excel文档
    javascript练习题
    转 浏览器滚动条以及常用样式汇总
    深入基础(五)工具模块,常用模块(2)
  • 原文地址:https://www.cnblogs.com/strive-19970713/p/11205594.html
Copyright © 2020-2023  润新知