题目
要求我们翻转一棵二叉树,即将所有节点的左子树和右子树进行交换。
示例:
输入:
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;
}
复杂度分析
- 对于每个节点,我们只需要进行一次左右子树交换操作,因此时间复杂度为 ,其中 是二叉树中节点的个数。
- 递归调用时,需要借助函数调用栈,因此空间复杂度也为 。