PTA【树的遍历】Java

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:

4 1 6 3 5 7 2

代码实现:

import java.io.*;
import java.util.TreeMap;

public class Main {
    
    
	static String[] lrd, ldr;
	static TreeMap<Integer, String> map;

	public static void main(String[] args) throws IOException {
    
    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		int n = Integer.parseInt(br.readLine());// 节点个数
		lrd = br.readLine().split(" ");// 后序遍历
		ldr = br.readLine().split(" ");// 中序遍历
		map = new TreeMap<>();
		dlr(0, n - 1, 1, n - 1);
		String s = "";
		for (String value : map.values()) {
    
    
			s += value + " ";
		}
		out.print(s.trim());
		out.flush();
	}

	private static void dlr(int start, int end, int key, int root) {
    
    // 起,止,键,根
		if (start > end)
			return;
		int i = start;
		while (i < end && !lrd[root].equals(ldr[i]))
			i++;
		map.put(key, lrd[root]);// 根
		dlr(start, i - 1, key * 2, root - end + i - 1);// 左
		dlr(i + 1, end, key * 2 + 1, root - 1);// 右
	}
}

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_50816725/article/details/112793615