给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
/*** Definition for a binary tree node.* public 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 List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if (root == null) return result;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {int levelSize = queue.size();List<Integer> currentLevel = new ArrayList<>();for (int i = 0; i < levelSize; i++) {TreeNode node = queue.poll();currentLevel.add(node.val);if (node.left != null) queue.offer(node.left);if (node.right != null) queue.offer(node.right);}result.add(currentLevel);}return result;}
}
时间复杂度:O(n)
空间复杂度:O(n)(最坏情况下队列存储所有叶子节点)
public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();traverse(root, 0, result);return result;
}private void traverse(TreeNode node, int level, List<List<Integer>> result) {if (node == null) return;if (result.size() == level) {result.add(new ArrayList<>());}result.get(level).add(node.val);traverse(node.left, level + 1, result);traverse(node.right, level + 1, result);
}
时间复杂度:O(n)
空间复杂度:O(h)(递归栈空间,h为树高)