剑指Offer32-Ⅱ从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
Posted zwwang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer32-Ⅱ从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。相关的知识,希望对你有一定的参考价值。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<List<Integer>> levelOrder(TreeNode root) { //和上题的思路基本一致,通过Queue队列的FIFO特性,以及其中的API方法来完成广度遍历 Queue<TreeNode> queue=new LinkedList<>(); //创建中转队列,通过它来存储子树 Queue<TreeNode> temp=new LinkedList<>(); queue.offer(root); List<List<Integer>> totall=new ArrayList<List<Integer>>(); //先处理边界情况 if(root==null) return totall; while(!queue.isEmpty()){ List<Integer> part =new ArrayList<Integer>(); while(!queue.isEmpty()){ //取出队列queue中的树,并打印其根节点值 TreeNode node=queue.poll(); part.add(node.val); //将取出的树的左右子树存到temp队列中 if(node.left!=null) temp.offer(node.left); if(node.right!=null) temp.offer(node.right); } //此时queue中的所有元素已经都取出来了,所以将temp中的所有元素复制到queue队列中,注意此时不能用queue=temp, //因为这样只是将queue队列指向了temp队列指向的内存地址,后面将temp清空了,那么queue也就指向空了, //则程序直接结束。 queue.addAll(temp); temp.clear(); totall.add(part); } return totall; } }
以上是关于剑指Offer32-Ⅱ从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 32 - II. 从上到下打印二叉树 II
[LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II