剑指offer——二叉树打印成多行

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

解题思路:

/**
 * 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
 * 思路:
 * 按层次输出二叉树
 * 访问根节点,并将根节点入队。
 * 当队列不空的时候,重复以下操作。
 * 1、弹出一个元素。作为当前的根节点。
 * 2、如果根节点有左孩子,访问左孩子,并将左孩子入队。
 * 3、如果根节点有右孩子,访问右孩子,并将右孩子入队。
 */
 //此时的queue中存储的都是下一层的节点,则end即为queue大小
 1 import java.util.ArrayList;
 2 
 3 
 4 /*
 5 public class TreeNode {
 6     int val = 0;
 7     TreeNode left = null;
 8     TreeNode right = null;
 9 
10     public TreeNode(int val) {
11         this.val = val;
12 
13     }
14 
15 }
16 */
17 public class Solution {
18     ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
19         
20         ArrayList<ArrayList<Integer>> res = new ArrayList<>();
21         ArrayList<Integer> list = new ArrayList<>();
22         ArrayList<TreeNode> queue = new ArrayList<>();
23         if(pRoot==null)
24             return res;
25         int start=0;
26         int end=1;
27         queue.add(pRoot);
28         while(!queue.isEmpty())
29         {
30             TreeNode node = queue.remove(0);
31             start++;
32             if(node.left!=null)
33                 queue.add(node.left);
34             if(node.right!=null)
35                 queue.add(node.right);
36             list.add(node.val);
37             
38             if(start==end)
39             {
40                 res.add(list);
41                 start=0;
42                 end = queue.size();
43                 list = new ArrayList<>();
44             }
45         }
46         return res;
47         
48     
49     }
50     
51 }
原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10879790.html