📜  在每第 k 层的二叉树中交换节点(1)

📅  最后修改于: 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
总结

本题需要熟悉二叉树的遍历方式,特别是层次遍历。使用队列来实现层次遍历的方式,能够让代码更加简洁、易懂。同时需要注意二叉树为空的情况,需要加以处理。