当前位置:首页 > Java

java如何遍历树

2026-02-05 06:07:24Java

遍历树的方法

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

深度优先遍历(DFS)

深度优先遍历包括前序遍历、中序遍历和后序遍历。以二叉树为例,节点定义如下:

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

前序遍历(根-左-右)

递归实现:

void preOrderTraversal(TreeNode root) {
    if (root == null) return;
    System.out.println(root.val);
    preOrderTraversal(root.left);
    preOrderTraversal(root.right);
}

迭代实现(使用栈):

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.println(node.val);
        if (node.right != null) stack.push(node.right);
        if (node.left != null) stack.push(node.left);
    }
}

中序遍历(左-根-右)

递归实现:

void inOrderTraversal(TreeNode root) {
    if (root == null) return;
    inOrderTraversal(root.left);
    System.out.println(root.val);
    inOrderTraversal(root.right);
}

迭代实现:

void inOrderTraversal(TreeNode root) {
    Stack<TreeNode> stack = new Stack<>();
    TreeNode curr = root;
    while (curr != null || !stack.isEmpty()) {
        while (curr != null) {
            stack.push(curr);
            curr = curr.left;
        }
        curr = stack.pop();
        System.out.println(curr.val);
        curr = curr.right;
    }
}

后序遍历(左-右-根)

递归实现:

void postOrderTraversal(TreeNode root) {
    if (root == null) return;
    postOrderTraversal(root.left);
    postOrderTraversal(root.right);
    System.out.println(root.val);
}

迭代实现:

void postOrderTraversal(TreeNode root) {
    if (root == null) return;
    Stack<TreeNode> stack = new Stack<>();
    Stack<Integer> result = new Stack<>();
    stack.push(root);
    while (!stack.isEmpty()) {
        TreeNode node = stack.pop();
        result.push(node.val);
        if (node.left != null) stack.push(node.left);
        if (node.right != null) stack.push(node.right);
    }
    while (!result.isEmpty()) {
        System.out.println(result.pop());
    }
}

广度优先遍历(BFS)

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

void levelOrderTraversal(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);
    }
}

通用树遍历

对于多叉树(每个节点可能有多个子节点),可以使用类似的方法。节点定义如下:

class TreeNode {
    int val;
    List<TreeNode> children;
    TreeNode(int x) { val = x; children = new ArrayList<>(); }
}

前序遍历

递归实现:

void preOrderTraversal(TreeNode root) {
    if (root == null) return;
    System.out.println(root.val);
    for (TreeNode child : root.children) {
        preOrderTraversal(child);
    }
}

后序遍历

递归实现:

void postOrderTraversal(TreeNode root) {
    if (root == null) return;
    for (TreeNode child : root.children) {
        postOrderTraversal(child);
    }
    System.out.println(root.val);
}

广度优先遍历

void levelOrderTraversal(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);
        for (TreeNode child : node.children) {
            queue.offer(child);
        }
    }
}

以上方法覆盖了常见的树遍历需求,可以根据具体场景选择合适的遍历方式。

java如何遍历树

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

相关文章

如何运行java

如何运行java

运行Java程序的方法 安装Java开发工具包(JDK) 确保系统已安装JDK。可通过命令行输入 java -version 检查是否安装。若未安装,需从Oracle官网或OpenJDK下载并配置环境…

java如何打开

java如何打开

安装Java开发环境 下载并安装Java Development Kit (JDK),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH变量正…

react 如何遍历

react 如何遍历

遍历数组 在React中遍历数组通常使用map方法,它会返回一个新的数组。map是处理数组并渲染列表元素的首选方法。 const items = ['Apple', 'Banana', 'Cherr…

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

java如何调用方法

java如何调用方法

调用方法的基本语法 在Java中,调用方法需要明确方法所属的对象(实例方法)或类(静态方法),并传递必要的参数。语法格式如下: 实例方法:对象名.方法名(参数列表); 静态方法:类名.方法…

如何编写java程序

如何编写java程序

安装开发环境 下载并安装JDK(Java Development Kit),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH正确设置。…