L2-006 树的遍历 - java

L2-006 树的遍历


时间限制
400 ms
内存限制
64 MB


题目描述:

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

输入格式:
输入第一行给出一个正整数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


给定二叉树的后序中序 求出该二叉树的前序


emmmmmmm

递归分解后序
在中序中找出根的位置
然后在中序中 根的位置 继续递归
根的位置 两边就是左右子树

还有需要注意
二叉树后序遍历是左右根 而前序遍历是根左右
无法直接从后序递归成前序 所以需要记录他们的下标 以下表从小到大来输出


import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{
	static int N = 30;
	static int hou[] = new int[N + 10];
	static int zhong[] = new int[N + 10];

	static TreeMap<Integer, Integer> tr = new TreeMap<Integer, Integer>();

	static int n;

	static void toqian(int start, int end, int left, int right, int node)
	{
		if (start > end || left > right)
			return;
		tr.put(node, hou[end]);

		for (int i = left; i <= right; i++)
		{
			if (zhong[i] == hou[end])
			{
				toqian(start, start + i - left - 1, left, i - 1, node << 1);
				toqian(start + i - left, end - 1, i + 1, right, node << 1 | 1);
			}
		}
	}

	public static void main(String[] args)
	{
		n = sc.nextInt();
		for (int i = 1; i <= n; i++)
			hou[i] = sc.nextInt();
		for (int i = 1; i <= n; i++)
			zhong[i] = sc.nextInt();
		toqian(1, n, 1, n, 1);

		int pos = 0;
		for (int i : tr.keySet())
		{
			if (pos++ != 0)
				out.print(" ");
			out.print(tr.get(i));
		}

		out.flush();
		out.close();
	}

	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);
}


二叉树
二叉树


如果有说错的 或者 不懂的 尽管提 嘻嘻

一起进步!!!


闪现

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢谢 啊sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值