也是第一次写森林树,确实不是很拿捏,受二叉树的影响太多了;你会发现这个多叉树一般不建链式结构的,都是数组式的比如“双亲表示法”,让子节点可以找到父节点这样。
有疑问欢迎交流,作者我也是蒟蒻,每个月都会在线吧doge
大部分都是我组长讲的方法,挺系统的(毕竟前几个题都是邻接表做,非常香)
除了题目都是思路哦
1.邻接表
【id:188】【20分】A. 树的先序遍历(双亲转先序)
时间限制1s
内存限制128MB
题目描述
给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点
编写程序,输出该树的先根遍历结果。
输入
第一个输入t,表示有t棵树
接着每棵树输入3行:
第1行输入n,表示树有n个结点
第2行输入n个英文字母,表示每个树结点的数值
第3行输入n个整数,表示每个结点的双亲在数组的下标
以此类推输入下一棵树
输出
共输出t行,每行输出一棵树的先根遍历结果
方法:
2.和第一题用一个方法
【id:187】【20分】B. 树的后根遍历(孩子链表法)
时间限制1s
内存限制128MB
题目描述
根据树的孩子链表表示法构建一棵树,并输出树的后根遍历
下标位置从0开始
输入
第一行输入两个参数,第一个参数n表示树有n个结点,第二个参数r表示根结点的数组下标
接着n行,每行先输入一个结点的数值(用单个字母表示),再输入结点的孩子的下标,最后以-1结尾
如果该结点没有孩子,则一行只输入结点的数值和-1
输出
只有一行输出,树的后根遍历结果
3.看清楚题是二叉树,然后可以试着写写数组表示的
【id:186】【20分】C. 树结构转换(先序转双亲)
时间限制1s
内存限制128MB
题目描述
给出一棵二叉树的特定字符先序遍历结果(空子树用字符'#'表示),构建该二叉树,并输出该二叉树的双亲表示法结果
双亲表示法的数组下标从0开始,根结点必定是在下标0元素,且根结点的双亲下标为-1,左右孩子按下标递增顺序排列,
结点下标是层次遍历顺序。
输入
第一个输入t,表示有t棵二叉树
接着t行,每行输入含特定字符的二叉树先序遍历序列
输出
共输出2t行
每棵二叉树输出两行,第一行输出各个结点的数值,第二行输出各结点的双亲下标
大神的数组表示二叉树:
我自己就是建的二叉树,然后两个队列一层层的输出
(一开始用的栈发现错了,所以队列的名字是st)
两个队列的代码:一个队列装着一层树,然后一个个出,出队列的时候把子树压入到另一个队列中
(突然发现一个队列就可以完成题目任务,不过两个队列可以把层弄清楚)
4.邻接表直接做
【id:381】【20分】D. 树的双亲结构转孩子链表结构
时间限制1s
内存限制128MB
题目描述
给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点
编写程序,输出该树的孩子链表表示法结果。
输入
输入一棵树的双亲表示法,共3行:
第1行输入n,表示树有n个结点
第2行输入n个英文字母,表示每个树结点的数值
第3行输入n个整数,表示每个结点的双亲在数组的下标
输出
按输入的结点顺序输出n行,每行输出结点孩子链表结果,先输出结点的数值,再输出结点的孩子的下标,以空格隔开,最后一个数据后面也有空格
如果链表为空则输出结点数值后,输出-1带空格,具体看样式
6.最好好好想想DFS,就弄层呗
【id:200】【10分】F. 先序+中序还原二叉树
时间限制1s
内存限制128MB
题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出
输出为一个整数,即该二叉树的高度。