二叉树的层序遍历通常使用队列(Queue)来实现。层序遍历也称为广度优先遍历(Breadth-First Traversal),它按照树的层级,从上到下、从左到右遍历节点。
java
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new LinkedList<>();
if (root==null){
return ans;
}
//构建一个队列 先进先出
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
List<Integer> list = new ArrayList<>();
//每次记录 queue的长度
int size = queue.size();
for (int i = 0; i <size ; i++) {
TreeNode cur = queue.poll();
if (cur.left!=null){
queue.add(cur.left);
}
if (cur.right!=null){
queue.add(cur.right);
}
list.add(cur.val);
}
ans.add(list);
}
return ans;
}
这个 levelOrder
方法首先检查根节点是否为空,如果为空则直接返回一个空的列表。然后,它创建一个队列并将根节点入队。在循环中,它首先获取当前层的节点数(即队列的大小),然后遍历这些节点,将它们的值添加到当前层的列表中,并将它们的子节点(如果存在)入队。完成当前层的遍历后,将当前层的列表添加到结果列表中。这个过程一直持续到队列为空,即遍历完所有层。最后,返回结果列表。
java
public static void main(String[] args) {
// 创建一个二叉树
TreeNode root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
root.right.left = new TreeNode(15);
root.right.right = new TreeNode(7);
BinaryTreeLevelOrderTraversal solution = new BinaryTreeLevelOrderTraversal();
List<List<Integer>> result = solution.levelOrder(root);
// 打印层序遍历的结果
for (List<Integer> level : result) {
System.out.println(level);
}
}
// 输出结果
[3]
[9, 20]
[15, 7]