Java队列层序遍历实现
1. 总体流程
步骤 | 描述 |
---|---|
1 | 创建一个队列,用于辅助层序遍历 |
2 | 将根节点入队 |
3 | 循环执行以下步骤,直到队列为空:<br> a. 出队一个节点<br> b. 访问该节点<br> c. 将该节点的左右子节点入队 |
2. 具体实现步骤
步骤1:创建一个队列
首先,我们需要创建一个队列来辅助层序遍历。在Java中,可以使用LinkedList
来实现队列的功能。代码如下:
import java.util.LinkedList;
import java.util.Queue;
Queue<TreeNode> queue = new LinkedList<>();
步骤2:根节点入队
接下来,我们需要将根节点入队。假设二叉树的节点类为TreeNode
,包含左右子节点和值的成员变量。代码如下:
queue.offer(root);
步骤3:循环执行出队、访问、入队操作
现在,我们需要循环执行以下步骤,直到队列为空:
- 出队一个节点
- 访问该节点
- 将该节点的左右子节点入队
具体的代码实现如下:
while (!queue.isEmpty()) {
TreeNode node = queue.poll(); // 出队一个节点
System.out.println(node.val); // 访问该节点
if (node.left != null) {
queue.offer(node.left); // 将左子节点入队
}
if (node.right != null) {
queue.offer(node.right); // 将右子节点入队
}
}
3. 完整代码示例
下面是完整的代码示例,用于实现Java队列层序遍历:
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
public class LevelOrderTraversal {
public static void levelOrderTraversal(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>(); // 创建一个队列
queue.offer(root); // 根节点入队
while (!queue.isEmpty()) {
TreeNode node = queue.poll(); // 出队一个节点
System.out.println(node.val); // 访问该节点
if (node.left != null) {
queue.offer(node.left); // 将左子节点入队
}
if (node.right != null) {
queue.offer(node.right); // 将右子节点入队
}
}
}
public static void main(String[] args) {
// 构建二叉树
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
// 层序遍历
levelOrderTraversal(root);
}
}
以上代码中,我们首先创建了一个队列queue
,然后将根节点root
入队。接着,我们使用循环不断出队一个节点,并访问该节点。同时,将该节点的左右子节点入队。最终,完成了Java队列层序遍历的实现。
希望以上的解释对你理解和实现Java队列层序遍历有所帮助。