Skip to content

力扣链接:226.翻转二叉树

难度:⭐

✏️ 方法一:

解题关键词:二叉树递归

解题思路:分别递归去反转左右子树,递归终止条件就是当前节点为空,递归做的操作就是交换左右子树。

typescript
function invertTree(root: TreeNode | null): TreeNode | null {
  // 如果当前节点为空,就停止递归
  if (root === null) return null;

  // 递归去反转左子树
  const left = invertTree(root.left);
  // 递归去反转右子树
  const right = invertTree(root.right);

  // 将左右子树交换
  root.left = right;
  root.right = left;

  return root;
}

✏️ 方法二:

解题关键词:二叉树队列层序遍历

解题思路:用层序遍历,把每个节点都加进去,然后把每个节点的 left 和 right 交换一下,最后返回 root 即可。

typescript
function invertTree(root: TreeNode | null): TreeNode | null {
  // 如果 root 为空,直接返回
  if (root === null) return null;

  // 队列
  const queue: TreeNode[] = [root];
  // 队列不为空,一直 loop
  while (queue.length) {
    // 出队
    const node = queue.shift();

    // 处理左节点
    if (node.left) queue.push(node.left);
    // 处理右节点
    if (node.right) queue.push(node.right);

    // 交换左右子树
    [node.left, node.right] = [node.right, node.left];
  }

  return root;
}