先序遍历首先访问根结点,然后遍历左子树,最后遍历右子树
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树
后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点
结论:
(1)先序遍历(第一个为树根)和后序遍历(最后一个为树根)可以确定树根
(2)中序遍历可以在知道根节点之后,确定左右子树
因此:无论是先序遍历序列还是后序遍历序列,确定了树根后,都需要中序遍历序列来确定左子树和右子树分别是哪一部分,然后才能够还原一颗二叉树。
L2-011. 玩转二叉树
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7
大体题意:
给你二叉树的中序遍历和前序遍历,然后再将所有非叶结点左右孩子对换,最后层序遍历输出。
思路:
分析下样例,思路很明确,先根据中序遍历和前序遍历用链表的方式构造出二叉树,然后再层序遍历输出即可,只不过这里的层序遍历是先右后左的方式。
构造二叉树用结构体递归做,层序遍历直接bfs即可!