用JAVA编写如下,输入一颗根为r和子树为T1和T2的二叉树的先序遍历序列和中序遍历序列,试着找出它的后序遍历序列。输入格式:输入包含几个测试用例,每个测试用例的第一行包含一个整数n(1≤n≤1000),即二叉树的结点数,后面跟着两行,分别表示先序遍历序列和中序遍历序列,可以假设他们唯一构造一个二叉树。 输出格式:对于每个测试用例,打印一行指定相应是后序遍历序列。
时间: 2023-07-24 16:06:13 浏览: 102
以下是使用JAVA实现输入一颗二叉树的先序遍历序列和中序遍历序列,输出后序遍历序列的代码:
```java
import java.util.Scanner;
public class Main {
static int n;
static int[] preorder, inorder, postorder;
static int index = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
n = scanner.nextInt();
preorder = new int[n];
inorder = new int[n];
postorder = new int[n];
for (int i = 0; i < n; i++) {
preorder[i] = scanner.nextInt();
}
for (int i = 0; i < n; i++) {
inorder[i] = scanner.nextInt();
}
index = n - 1;
buildTree(0, n - 1, 0, n - 1);
for (int i = 0; i < n; i++) {
System.out.print(postorder[i] + " ");
}
System.out.println();
}
}
private static void buildTree(int preL, int preR, int inL, int inR) {
if (preL > preR || inL > inR) {
return;
}
int root = preorder[preL];
int k = 0;
for (int i = inL; i <= inR; i++) {
if (inorder[i] == root) {
k = i;
break;
}
}
postorder[index--] = root;
buildTree(preL + 1, preL + k - inL, inL, k - 1);
buildTree(preL + k - inL + 1, preR, k + 1, inR);
}
}
```
其中,buildTree方法使用递归实现了二叉树的构建,并且在构建过程中实现了后序遍历序列的生成。在构建过程中,我们首先找到preorder[preL]在inorder数组中的位置k,然后将其插入到postorder数组的倒数第index个位置,同时将index减1,最后递归构建左子树和右子树。最终得到的postorder数组即为输入二叉树的后序遍历序列。
阅读全文