51. 平移二叉树(第七期模拟笔试)
内存限制:128 MB
时间限制:1.500 S
题目描述
给定一棵二叉树,需要对每一层的节点执行向右循环位移操作。其中每一次向右位移一位(即 k = 1)的操作包括以下几步骤:
- 如果当前节点是其父节点的左子节点,将其变为其父节点的右子节点。
- 如果当前节点是其父节点的右子节点,将其变为其父节点右侧相邻兄弟节点的左子节点,若当前节点的父节点已经是其同级最右侧的节点,则将其变为同级最左侧节点的左子节点。
- 所有层次上的节点同时执行一次位移操作。
- 从最底层开始,逐层向上操作,直到达到根节点,完成整个过程
输入
第一行包含两个整数,分别是 k 和 N,其中 k 表示每次向右位移的位数,N 表示树的层序遍历节点的数量(包括空节点)。
第二行包含 N 个整数,树的层序遍历结构,用于描述二叉树的节点关系。
第二行包含 N 个整数,树的层序遍历结构,用于描述二叉树的节点关系。
输出
输出二叉树的层序遍历结构,以表示经过位移操作后的结果。
样例输入 复制
1 17
1 2 3 4 -1 5 6 -1 7 -1 -1 8 -1 -1 -1 -1 -1
样例输出 复制
1 3 2 -1 5 6 4 7 -1 -1 8 -1 -1 -1 -1 -1 -1
提示
数据范围:
1 <= k <= 1000;
2 <= N <= 10001;
将层序遍历的数组转化为二叉树时,可以按照层序遍历的顺序逐个构建二叉树的节点之间的连接关系,其中-1表示空节点,空节点是没有左右孩子节点的。
最后一层向右平移一位。
向上一层,然后继续向右平移一位。
再向上一层,继续向右平移一位。
最终按照层序遍历的方式打印二叉树