我们可以使用递归来翻转二叉树。对于每个节点,我们交换其左子树和右子树,并递归地对左右子树进行同样的操作。
递归1
var invertTree = function(root) {
if (!root) {
return null; // 如果节点为空,直接返回
}
// 交换左右子树
let temp = root.left;
root.left = root.right;
root.right = temp;
// 递归翻转左右子树
invertTree(root.left);
invertTree(root.right);
return root;
};
递归2
var invertTree = function(root) {
if(!root) return root
let left = invertTree(root.left)
let right = invertTree(root.right)
root.right = left
root.left = right
return root
};
bfs
var invertTree = function (root) {
if (!root) return root
let stack = [root]
while (stack.length) {
let size = stack.length
for (let i = 0; i < size; ++i) {
// 其实这里用 pop 还有 shift 都可以
let node = stack.pop()
let tmp = node.left
node.left = node.right
node.right = tmp
if (node.left) stack.push(node.left)
if (node.right) stack.push(node.right)
}
}
return root
};