-
Notifications
You must be signed in to change notification settings - Fork 126
/
Copy pathL0102_BinaryTreeLevelOrderTraversal.java
129 lines (111 loc) · 3.79 KB
/
L0102_BinaryTreeLevelOrderTraversal.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import java.util.*;
/**
* https://leetcode.cn/problems/binary-tree-level-order-traversal/
*
* 给你二叉树的根节点 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
*/
public class L0102_BinaryTreeLevelOrderTraversal {
public static 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;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
toString(this, sb);
return sb.toString();
}
private void toString(TreeNode node, StringBuilder sb) {
if (node == null) {
sb.append("null");
return;
}
sb.append(node.val);
if (node.left != null || node.right != null) {
sb.append(",");
toString(node.left, sb);
sb.append(",");
toString(node.right, sb);
}
}
}
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;
}
public static void main(String[] args) {
L0102_BinaryTreeLevelOrderTraversal solution = new L0102_BinaryTreeLevelOrderTraversal();
// 测试用例 1:普通二叉树
TreeNode root1 = new TreeNode(3);
root1.left = new TreeNode(9);
root1.right = new TreeNode(20);
root1.right.left = new TreeNode(15);
root1.right.right = new TreeNode(7);
System.out.println("测试用例 1:");
System.out.println("输入:root = " + root1);
System.out.println("输出:" + solution.levelOrder(root1));
System.out.println();
// 测试用例 2:单个节点
TreeNode root2 = new TreeNode(1);
System.out.println("测试用例 2:");
System.out.println("输入:root = " + root2);
System.out.println("输出:" + solution.levelOrder(root2));
System.out.println();
// 测试用例 3:空树
System.out.println("测试用例 3:");
System.out.println("输入:root = null");
System.out.println("输出:" + solution.levelOrder(null));
}
}