LeetCode热题(JS版) - 226. 翻转二叉树

118 阅读1分钟

题目

要求我们翻转一棵二叉树,即将所有节点的左子树和右子树进行交换。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

思路

对于一颗二叉树,我们需要将它的每个节点的左右子树进行交换。因此,我们可以使用递归的方式来解决这个问题。对于当前节点,我们先将其左右子树进行交换,然后再对左子树和右子树分别进行递归调用。

代码实现

下面是 TypeScript 实现的代码,其中 TreeNode 是二叉树节点的类型定义。

function invertTree(root: TreeNode | null): TreeNode | null {
  if (root === null) {
    return null;
  }
  const temp = root.left;
  root.left = invertTree(root.right);
  root.right = invertTree(temp);
  return root;
}

image.png

复杂度分析

  • 对于每个节点,我们只需要进行一次左右子树交换操作,因此时间复杂度为 O(n)O(n),其中 nn 是二叉树中节点的个数。
  • 递归调用时,需要借助函数调用栈,因此空间复杂度也为 O(n)O(n)