网站怎么显示百度名片,微信软文案例,外贸订单网站有哪些,忻州市忻府区文章目录 题目描述思路代码 题目描述
给你二叉树的根节点 root #xff0c;返回其节点值的 层序遍历 。 #xff08;即逐层地#xff0c;从左到右访问所有节点#xff09;。
示例 1#xff1a;
输入#xff1a;root [3,9,20,null,null,15,7] 输出#xff1a;[[3],[… 文章目录 题目描述思路代码 题目描述
给你二叉树的根节点 root 返回其节点值的 层序遍历 。 即逐层地从左到右访问所有节点。
示例 1
输入root [3,9,20,null,null,15,7] 输出[[3],[9,20],[15,7]] 示例 2
输入root [1] 输出[[1]] 示例 3
输入root [] 输出[]
提示
树中节点数目在范围 [0, 2000] 内 -1000 Node.val 1000
思路
这个问题可以用队列解决。先把根节点入队然后队列不空的话就出队出队的同时遍历出队节点如果当前节点有孩子节点就把孩子节点入队这样遍历的顺序就是从上到下、从左到右满足层序遍历。 在代码中详细注释了怎么一层一层地统计结果。
代码
class Solution {//层序遍历public ListListInteger levelOrder(TreeNode root) {ArrayListListInteger result new ArrayList();if (root null) {return result;}//将根节点入队QueueTreeNode queue new LinkedList();queue.offer(root);while (!queue.isEmpty()) {//求一下当前队列中元素的个数这个数也就是表示这一层有多少个节点//因为下一层的还没有开始入队上一层的都已经出队了队列中的元素就都是这一层的了int length queue.size();//因为最后要求返回的结果是分层的所以按照层进行循环添加到result中ListInteger list new ArrayList();while (length 0) {//取出队头节点TreeNode node queue.poll();list.add(node.val);//如果这个节点的左右孩子不为空就将左右孩子入队if (node.left ! null) {queue.offer(node.left);}if (node.right ! null) {queue.offer(node.right);}length--;}//将这一层的结果加入到result中result.add(list);}return result;}
}