【leetcode】226. 翻转二叉树

65 阅读1分钟

leetcode-226.png

我们可以使用递归来翻转二叉树。对于每个节点,我们交换其左子树和右子树,并递归地对左右子树进行同样的操作。

递归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
};