📅  最后修改于: 2023-12-03 15:08:03.856000             🧑  作者: Mango
现在给定一颗二叉树和一个整数 k,要求交换每第 k 层的节点。即在深度为 k 的层,左右子树节点的值进行交换。
根据题目要求,需要对整个二叉树进行遍历,找到每一层的节点。这里可以用层次遍历的思想,使用队列来实现。
先将根节点入队,然后依次取出队列中的节点,判断当前节点所在的深度是否为 k,如果是,则交换左右子树节点的值。如果不是,将当前节点的左右节点入队,并记录下其处于的深度。
依次循环以上步骤,直到队列为空。
代码如下所示:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def swapNodes(root: TreeNode, k: int) -> TreeNode:
if not root:
return None
queue = [(root, 1)] # 初始化队列,存入根节点及其所在的深度
while queue:
node, depth = queue.pop(0) # 取出队列的第一个节点
if depth % k == 0: # 判断当前节点所在的深度是否为 k 的倍数
node.left, node.right = node.right, node.left # 交换左右子树节点的值
if node.left: # 将当前节点的左右节点入队,并更新深度
queue.append((node.left, depth + 1))
if node.right:
queue.append((node.right, depth + 1))
return root
本题需要熟悉二叉树的遍历方式,特别是层次遍历。使用队列来实现层次遍历的方式,能够让代码更加简洁、易懂。同时需要注意二叉树为空的情况,需要加以处理。