力扣链接: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;
}