当前位置:首页 > Java

java如何遍历树

2026-03-03 17:17:10Java

遍历树的方法

在Java中,树的遍历通常分为深度优先遍历(DFS)和广度优先遍历(BFS)。以下是常见的几种遍历方式及其实现方法。

深度优先遍历(DFS)

深度优先遍历分为前序遍历、中序遍历和后序遍历三种方式。

前序遍历(根-左-右)

前序遍历首先访问根节点,然后递归地遍历左子树,最后遍历右子树。

public void preOrder(TreeNode root) {
    if (root == null) return;
    System.out.println(root.val); // 访问根节点
    preOrder(root.left);          // 遍历左子树
    preOrder(root.right);         // 遍历右子树
}

中序遍历(左-根-右)

java如何遍历树

中序遍历先递归地遍历左子树,然后访问根节点,最后遍历右子树。

public void inOrder(TreeNode root) {
    if (root == null) return;
    inOrder(root.left);           // 遍历左子树
    System.out.println(root.val);  // 访问根节点
    inOrder(root.right);          // 遍历右子树
}

后序遍历(左-右-根)

后序遍历先递归地遍历左子树,然后遍历右子树,最后访问根节点。

java如何遍历树

public void postOrder(TreeNode root) {
    if (root == null) return;
    postOrder(root.left);         // 遍历左子树
    postOrder(root.right);        // 遍历右子树
    System.out.println(root.val); // 访问根节点
}

广度优先遍历(BFS)

广度优先遍历使用队列实现,按层次遍历树的节点。

public void levelOrder(TreeNode root) {
    if (root == null) return;
    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 void preOrderIterative(TreeNode root) {
    if (root == null) return;
    Stack<TreeNode> stack = new Stack<>();
    stack.push(root);
    while (!stack.isEmpty()) {
        TreeNode node = stack.pop();
        System.out.println(node.val);
        if (node.right != null) stack.push(node.right);
        if (node.left != null) stack.push(node.left);
    }
}

树的节点定义

以下是树的节点定义示例:

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int val) {
        this.val = val;
    }
}

总结

树的遍历可以通过递归或迭代实现。深度优先遍历包括前序、中序和后序三种方式,广度优先遍历通常使用队列实现。根据具体需求选择合适的遍历方式。

标签: 遍历java
分享给朋友:

相关文章

java如何连接数据库

java如何连接数据库

Java连接数据库的方法 Java连接数据库通常使用JDBC(Java Database Connectivity)技术,以下是具体步骤和示例代码。 加载数据库驱动 在连接数据库之前,需要加载对应的…

java如何产生随机数

java如何产生随机数

使用 Math.random() 方法 Math.random() 生成一个范围在 [0.0, 1.0) 的伪随机 double 值。通过缩放和偏移可以生成指定范围的随机数。 double ra…

如何成为java架构师

如何成为java架构师

掌握扎实的Java基础 深入理解Java核心知识,包括多线程、集合框架、JVM原理、设计模式等。熟悉Java生态中的常用框架如Spring、MyBatis、Hibernate等,并能分析其源码实现。…

java如何调试

java如何调试

调试Java程序的基本方法 使用IDE内置的调试工具(如IntelliJ IDEA或Eclipse)是最常见的方式。在代码行号旁点击设置断点,启动调试模式后,程序会在断点处暂停,允许查看变量值、调用栈…

如何学习java语言

如何学习java语言

学习Java语言的系统方法 理解基础概念 Java是一种面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制流语句(if-else、循环)是第一步。熟悉类和对象的概念,理解封装、继承和多态三…

java下载功能vue实现

java下载功能vue实现

Java 后端文件下载功能实现 后端需提供文件下载的接口,通常使用 HttpServletResponse 实现。以下是一个简单的 Java Spring Boot 示例: @GetMapping(…