102_二叉树的层序遍历
102_二叉树的层序遍历
package 二叉树.BT; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; /** * https://leetcode-cn.com/problems/binary-tree-level-order-traversal/ * @author Huangyujun * 使用的数据结构是 队列(先进先出,符合每一层根poll掉,进入其子结点,(子结点的顺序也是先进先出)) */ public class _102_二叉树的层序遍历 { //此题需要将同一层的结点放到一个数组中去(因此需要有个状态变量记录已经到达当前层的最后) List<Integer> item = new ArrayList<>(); List<List<Integer>> result = new ArrayList<List<Integer>>(); public List<List<Integer>> levelOrder(TreeNode root) { if(root == null) return result; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int levelSize = 1;//当前层的结点数量 while(!queue.isEmpty()) { //拿到当前结点 TreeNode node = queue.poll(); levelSize--; item.add(node.val); if(node.left != null) { queue.offer(node.left); } if(node.right != null) { queue.offer(node.right); } if(levelSize == 0) { //当前层的结束,需要进入下一层 result.add(item); item = new ArrayList<>(); //进入下一层(观察发现,下一层的结点数量就是队列长度) levelSize = queue.size(); } } return result; } }
本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15709204.html