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

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;
    	}
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值