用java语言层次遍历树结构
时间: 2023-07-12 16:33:00 浏览: 94
层次遍历(又称广度优先遍历)是一种从根节点开始逐层遍历树结构的方法,先访问根节点,然后依次访问每一层的节点,直到访问完整个树。
以下是一个Java实现层次遍历的示例代码:
```java
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class BinaryTree {
public void levelOrder(TreeNode root) {
if (root == null) return;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root); // 将根节点加入队列
while (!queue.isEmpty()) {
int levelSize = queue.size(); // 获取当前层的节点数
for (int i = 0; i < levelSize; i++) {
TreeNode node = queue.poll(); // 出队列
System.out.print(node.val + " "); // 访问节点
if (node.left != null) queue.offer(node.left); // 将左子节点加入队列
if (node.right != null) queue.offer(node.right); // 将右子节点加入队列
}
System.out.println(); // 输出换行符,表示已访问完当前层
}
}
}
```
在上面的示例代码中,我们使用了一个队列来实现层次遍历。首先将根节点加入队列,然后在循环中依次访问队列中的每个节点,并将其左右子节点加入队列。由于队列是一种先进先出的数据结构,因此每次出队列的节点都是该层最左边的节点,可以保证遍历的顺序是从上到下、从左到右。
下面是一个使用示例:
```java
public class Main {
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);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(7);
BinaryTree tree = new BinaryTree();
tree.levelOrder(root);
}
}
```
输出结果为:
```
1
2 3
4 5 6 7
```
其中每一行表示一层的节点。第一行只有一个节点,即根节点1;第二行有两个节点,分别为2和3;第三行有四个节点,分别为4、5、6、7。
阅读全文