LeetCode102:二叉树层序遍历详解(附图解)
题目LeetCode102给你二叉树的根节点root返回其节点值的层序遍历。 即逐层地从左到右访问所有节点。输入root [3,9,20,null,null,15,7]输出[[3],[9,20],[15,7]]Python解法代码示例广度优先搜索from collections import deque from typing import List, Optional # Definition for a binary tree node. class TreeNode: def __init__(self, val0, leftNone, rightNone): self.val val self.left left self.right right class Solution: def levelOrder(self, root: Optional[TreeNode]) - List[List[int]]: if not root: return [] res [] q deque([root]) # 队列初始[3] while q: # 只要队列不为空 level [] size len(q) # 记录当前层有多少节点 for _ in range(size): node q.popleft() # 取出队首 level.append(node.val) if node.left: q.append(node.left) if node.right: q.append(node.right) res.append(level) return res过程展示Java解法代码示例广度优先搜索import java.util.List; import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val val; this.left left; this.right right; } } class Solution { public ListListInteger levelOrder(TreeNode root) { ListListInteger res new ArrayList(); if (root null) return res; QueueTreeNode queue new LinkedList(); queue.offer(root); while (!queue.isEmpty()) { ListInteger level new ArrayList(); int size queue.size(); for (int i 0; i size; i) { TreeNode node queue.poll(); level.add(node.val); if (node.left ! null) queue.offer(node.left); if (node.right ! null) queue.offer(node.right); } res.add(level); } return res; } }C解法代码示例广度优先搜索#include vector #include queue using namespace std; // 二叉树节点定义 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} }; class Solution { public: vectorvectorint levelOrder(TreeNode* root) { vectorvectorint res; if (!root) return res; queueTreeNode* q; q.push(root); while (!q.empty()) { vectorint level; int size q.size(); for (int i 0; i size; i) { TreeNode* node q.front(); q.pop(); level.push_back(node-val); if (node-left) q.push(node-left); if (node-right) q.push(node-right); } res.push_back(level); } return res; } };