题目描述:实现二叉树的前序,中序和后序遍历。要求输出三行,分别表示二叉树的先序,中序和后序。
输入如下:
3 1
1 2 3
2 0 0
3 0 0
第一行输入两个整数 n 和 root,n 表示二叉树的总节点个数,root 表示二叉树的根节点。
以下 n 行每行三个整数 fa,lch,rch,表示 fa 的左儿子为 lch,右儿子为 rch。(如果 lch 为 0 则表示 fa 没有左儿子,rch同理)
输出:
1 2 3
2 1 3
2 3 1
import java.util.*;
class Node {
int val;
Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树
Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树
public Node(int val) {
this.val = val;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int root = sc.nextInt();
Node node = buildTree(sc);
preOrderTraversal(node);
System.out.println();
inOrderTraversal(node);
System.out.println();
postOrderTraversal(node);
System.out.println();
}
public static Node buildTree(Scanner sc) {
int fa = sc.nextInt(), left = sc.nextInt(), right = sc.nextInt();
Node node = new Node(fa);
if (left != 0) {
node.left = buildTree(sc);
}
if (right != 0) {
node.right = buildTree(sc);
}
return node;
}
public static void preOrderTraversal(Node root){
if (root == null) {
return;
}
System.out.print(root.val + " ");
preOrderTraversal(root.left);
preOrderTraversal(root.right);
}
public static void inOrderTraversal(Node root){
if (root == null) {
return;
}
inOrderTraversal(root.left);
System.out.print(root.val + " ");
inOrderTraversal(root.right);
}
public static void postOrderTraversal(Node root){
if (root == null) {
return;
}
postOrderTraversal(root.left);
postOrderTraversal(root.right);
System.out.print(root.val + " ");
}
}