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队列层序遍历有所帮助。