在Java中,二叉树的前序遍历(Preorder Traversal)遵循“根-左-右”的顺序。我们可以使用递归或迭代的方式来实现前序遍历。以下是两种实现方式:
1. 递归实现
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public class BinaryTree {
// 前序遍历(递归)
public void preorderTraversal(TreeNode root) {
if (root == null) {
return;
}
// 访问根节点
System.out.print(root.val + " ");
// 递归遍历左子树
preorderTraversal(root.left);
// 递归遍历右子树
preorderTraversal(root.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);
BinaryTree tree = new BinaryTree();
System.out.println("前序遍历结果:");
tree.preorderTraversal(root);
}
}
2. 迭代实现(使用栈)
import java.util.Stack;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public class BinaryTree {
// 前序遍历(迭代)
public void preorderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
// 访问根节点
System.out.print(node.val + " ");
// 先压右子树,再压左子树
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}
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);
BinaryTree tree = new BinaryTree();
System.out.println("前序遍历结果:");
tree.preorderTraversal(root);
}
}
输出结果
对于上述两种实现方式,输出结果都是:
前序遍历结果:
1 2 4 5 3
解释
- 递归实现:通过递归调用自身来遍历左子树和右子树。
- 迭代实现:使用栈来模拟递归过程,先访问根节点,然后将右子节点和左子节点依次压入栈中。
两种方法都可以有效地实现二叉树的前序遍历,选择哪种方式取决于具体的应用场景和个人偏好。