剑指offer-28.把二叉树打印成多行(174)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_38332722/article/details/100557887

28.把二叉树打印成多行(174)

  • 题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

  • 思路:在使用队列的层次遍历中,当遍历完上层结点时(上层结点出队),队中的元素全部为下一层的结点。

    ​ 我们可以控制每一次循环的次数为该层的节点数(队中的元素个数),当将这层结点全部遍历(全部出队)后,换行。然后再开始遍历下一层的结点。

    package _28.把二叉树打印成多行;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.Queue;
    /**
     * 题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
     * @author Administrator
     *
     */
    public class PrintTreeInLine {
      public static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        	ArrayList<ArrayList<Integer>> print = new ArrayList<>();
    		if (pRoot == null)
    			return print;
    
    		Queue<TreeNode> queue = new LinkedList<TreeNode>();
    		TreeNode node = pRoot;
    		
    		queue.add(node);
    		while (!queue.isEmpty()) {
    			ArrayList<Integer> list = new ArrayList<>();
    			//将这层结点遍历完后再跳出循环,跳出循环后,队中的元素全部为下一层结点
    			for(int i = queue.size();i>0;i--){
    				node = queue.poll();
    				list.add(node.val);
    				if (node.left != null)
    					queue.add(node.left);
    				if (node.right != null)
    					queue.add(node.right);
    			}
    			print.add(list);
    		}
    		return print;
        }
    
    	public static void main(String[] args) {
    		TreeNode root = new TreeNode(0);
    		TreeNode node1 = new TreeNode(1);
    		TreeNode node2 = new TreeNode(2);
    		TreeNode node3 = new TreeNode(3);
    		TreeNode node4 = new TreeNode(4);
    		root.left = node1;
    		root.right = node2;
    		node1.left = node3;
    		node1.right = node4;
    		ArrayList<ArrayList<Integer>> print = Print(root);
    		System.out.println(print);
    		
    	}
    }
    
    class TreeNode {
    	int val = 0;
    	TreeNode left = null;
    	TreeNode right = null;
    
    	public TreeNode(int val) {
    		this.val = val;
    	}
    }
    

猜你喜欢

转载自blog.csdn.net/qq_38332722/article/details/100557887