1)二叉树问题:实现二叉链表的先序递归遍历,中序递归遍历,后序递归遍历以及层序遍历 java
时间: 2024-12-21 07:21:24 浏览: 5
在Java中,我们可以使用递归和队列来实现二叉树的不同遍历:
1. **先序遍历(Preorder Traversal,根节点 -> 左子树 -> 右子树)**:
```java
void preorder(Node node) {
if (node != null) {
System.out.print(node.data + " "); // 访问根节点
preorder(node.left); // 递归左子树
preorder(node.right); // 递归右子树
}
}
```
2. **中序遍历(Inorder Traversal,左子树 -> 根节点 -> 右子树)**:
```java
void inorder(Node node) {
if (node != null) {
inorder(node.left); // 递归左子树
System.out.print(node.data + " "); // 访问根节点
inorder(node.right); // 递归右子树
}
}
```
3. **后序遍历(Postorder Traversal,左子树 -> 右子树 -> 根节点)**:
```java
void postorder(Node node) {
if (node != null) {
postorder(node.left); // 递归左子树
postorder(node.right); // 递归右子树
System.out.print(node.data + " "); // 访问根节点
}
}
```
4. **层序遍历(Level Order Traversal,逐层从左到右)**:
由于递归无法直接处理层次结构,这里通常使用`BFS`(广度优先搜索),可以借助队列:
```java
Queue<Node> queue = new LinkedList<>();
void levelOrder(Node root) {
if (root == null) return;
queue.offer(root);
while (!queue.isEmpty()) {
Node curr = queue.poll();
System.out.print(curr.data + " ");
if (curr.left != null) queue.offer(curr.left);
if (curr.right != null) queue.offer(curr.right);
}
}
```
每个遍历方法最后记得加上适当的结束条件(例如检查节点是否为空)。
阅读全文