在Java中,如何对二叉树进行先序遍历?

编程语言 2026-07-09

我正在用Eclipse学习Java二叉树,希望对二叉树进行先序遍历,但不确定我的实现是否正确。

class Node {

    int data;
    Node left;
    Node right;

    public Node(int data) {
        this.data = data;
        left = null;
        right = null;
    }
}

public class Main {

    public static void preorder(Node root) {

        if (root != null) {

            System.out.println(root.data);

            preorder(root.left);

            preorder(root.right);
        }
    }

    public static void main(String[] args) {

        Node root = new Node(10);

        root.left = new Node(5);
        root.right = new Node(20);

        root.left.left = new Node(3);

        preorder(root);
    }
}

我想确认这个输出是否确实对应先序遍历。

我尝试过的做法

  • 我把输出与网上的示例进行了对比。
  • 我检查了递归调用的顺序。
  • 我修改了打印顺序,得到了不同的结果。

解决方案

你的实现完全正确。先序遍历严格遵循你所编写的结构:根节点、左子树、右子树。

为了让你对代码充满信心,下面给出在main方法中你所构建的树上的逐步执行流程:

  1. 进入根节点10。打印10。
  2. 递归访问左子节点5。打印5。
  3. 递归访问5 的左子节点,即3。打印3。
  4. 尝试访问3 的左子和右子,但它们都是空的,因此返回。
  5. 尝试访问5 的右子节点,但也是空的,因此返回。
  6. 递归访问根节点10的右子节点,即20。打印20。

因此,控制台中预期的输出应为:10 5 3 20

一个小贴士:如果你希望输出更易读、便于与网上示例对比,可以把System.out.println(root.data); 改为System.out.print(root.data + " ");。这样就会把所有内容打印在同一行:10 5 3 20。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章