首页 > 试题广场 >

魔力转圈圈

[编程题]魔力转圈圈
  • 热度指数:831 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

牛牛很喜欢玩二叉树。这天牛能送给了他一个以1为根结点的结点的二叉树,他想对这个二叉树进行一些加工。

牛牛刚刚学会转圈圈,所以很喜欢旋转。现在他想对这颗二叉树进行m次旋转。

每次旋转牛牛会指定一个结点,并让以这个结点为根的子树中的所有结点的左右儿子互换。

多次操作之后,牛牛希望以中序遍历的方式输出操作完之后的二叉树。
示例1

输入

5,3,[4,3,0,0,0],[2,0,0,5,0],[3,1,5]

输出

[2,3,1,5,4]

说明

最开始1的左儿子为4,右儿子为2
2的左儿子为3.
4的右儿子为5.
第一次操作结点3,结点3没有儿子,所以没有发生变化
第二次操作结点1,结点1的左儿子变为2,右儿子变为4. 
结点4的左儿子变为5,右儿子变为不存在。结点
结点2的左儿子变为不存在,右儿子变成3
第三次操作结点5,结点5没有儿子,不发生变化。
最开始1的左儿子为2,右儿子为4
2的右儿子为3.
4的左儿子为5.
中序遍历结果为[2,3,1,5,4]

备注:
数据保证结点1为根节点
第一个参数n代表树的结点个数
第二个参数m代表需要进行的操作个数
第三个参数l包含n个元素,代表每个结点的左儿子结点。如果为0则代表该点无左儿子
第三个参数r包含n个元素,代表每个结点的右儿子结点。如果为0则代表该点无右儿子
第四个参数k包含m个元素,代表m次操作的结点编号。

这道题你会答吗?花几分钟告诉大家答案吧!

问题信息

难度:
0条回答 2486浏览

热门推荐

通过挑战的用户

查看代码