多叉树OJ思路 ,无代码

也是第一次写森林树,确实不是很拿捏,受二叉树的影响太多了;你会发现这个多叉树一般不建链式结构的,都是数组式的比如“双亲表示法”,让子节点可以找到父节点这样。

有疑问欢迎交流,作者我也是蒟蒻,每个月都会在线吧doge

大部分都是我组长讲的方法,挺系统的(毕竟前几个题都是邻接表做,非常香)

除了题目都是思路哦

1.邻接表

【id:188】【20分】A. 树的先序遍历(双亲转先序)

时间限制1s

内存限制128MB

题目描述

给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点

编写程序,输出该树的先根遍历结果。

输入

第一个输入t,表示有t棵树

接着每棵树输入3行:

第1行输入n,表示树有n个结点

第2行输入n个英文字母,表示每个树结点的数值

第3行输入n个整数,表示每个结点的双亲在数组的下标

以此类推输入下一棵树

输出

共输出t行,每行输出一棵树的先根遍历结果

方法:

多叉树OJ思路 ,无代码_第1张图片

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行

每棵二叉树输出两行,第一行输出各个结点的数值,第二行输出各结点的双亲下标

大神的数组表示二叉树:

多叉树OJ思路 ,无代码_第2张图片

我自己就是建的二叉树,然后两个队列一层层的输出

(一开始用的栈发现错了,所以队列的名字是st)

两个队列的代码:一个队列装着一层树,然后一个个出,队列的时候把子树压入到另一个队列

(突然发现一个队列就可以完成题目任务,不过两个队列可以把层弄清楚)

多叉树OJ思路 ,无代码_第3张图片

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的不包含重复英文字母(区别大小写)的字符串。

输出

输出为一个整数,即该二叉树的高度。

你可能感兴趣的:(数据结构,算法,数据结构)