給你二叉樹的根節點 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為樹高)