题目来源
剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode)
题目
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
示例
给定二叉树:[3,9,20,null,null,15,7]
返回其层次遍历结果:
[[3],[9,20],[15,7] ]
解析:
该题是二叉树层次遍历的另一种形式,要想做出该题,首先要明白层次遍历的原理,下面来复习一下层次遍历:
层次遍历的实现需要借助队列实现,首先将根结点入队,如果队列不为空,则取出队列的队头节点cur,并输出队头节点的值cur.value;然后,若队头节点的左孩子不为空,即cur.left!=null,则将其入队;若队头节点的右孩子不为空,即cur.right!=null,则将其入队;然后循环上述步骤,直至队列为空。
public static void levelOrder(Node root) {if (root == null) {return;}Queue<Node> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {Node cur = queue.poll();System.out.print(cur.value+" ");if (cur.left != null) {queue.offer(cur.left);}if (cur.right != null) {queue.offer(cur.right);}}}
本题是将二叉树的每层以链表的形式输出,但其思想仍然是层次遍历的思想,其具体实现如下:
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> list=new ArrayList<>();//如果树为空,则返回if(root==null){return list;}//如果树不为空//借助队列Queue<TreeNode> queue=new LinkedList<>();queue.offer(root);//将根结点入队while(!queue.isEmpty()){ArrayList<Integer> arraylist=new ArrayList<>();int size= queue.size();for(int i=0;i<size;i++){TreeNode cur=queue.poll();arraylist.add(cur.val);if(cur.left!=null){queue.offer(cur.left);}if(cur.right!=null){queue.offer(cur.right);}}list.add(arraylist);}return list;}
}