当前位置:首页 > 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);
    }
}

中序遍历(左-根-右)

递归实现:

java如何遍历树

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);
}

迭代实现:

java如何遍历树

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如何输出

输出到控制台 使用 System.out.println() 方法输出内容到控制台,适用于调试或简单信息展示。 示例代码: System.out.println("Hello, World!")…

java如何调用方法

java如何调用方法

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

如何配置java环境

如何配置java环境

下载JDK安装包 访问Oracle官网或OpenJDK官网,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。下载完成后,运行安装程序并按照提示完成安装。 设置环境变量 右键…

java如何自学

java如何自学

确定学习目标和路径 自学Java需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…

java如何输出数组

java如何输出数组

输出数组的方法 在Java中,输出数组内容有多种方式,具体取决于数组类型和输出格式需求。以下是几种常见的方法: 使用Arrays.toString()方法 适用于一维数组,直接调用Arrays.to…