在Java中,如何对二叉树进行先序遍历?
我正在用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方法中你所构建的树上的逐步执行流程:
- 进入根节点10。打印10。
- 递归访问左子节点5。打印5。
- 递归访问5 的左子节点,即3。打印3。
- 尝试访问3 的左子和右子,但它们都是空的,因此返回。
- 尝试访问5 的右子节点,但也是空的,因此返回。
- 递归访问根节点10的右子节点,即20。打印20。
因此,控制台中预期的输出应为:10 5 3 20
一个小贴士:如果你希望输出更易读、便于与网上示例对比,可以把System.out.println(root.data); 改为System.out.print(root.data + " ");。这样就会把所有内容打印在同一行:10 5 3 20。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。