[LeetCode 226] Invert Binary Tree

invert a binary tree.

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

to

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

Trivia:
This problem was inspired by this original tweet by Max Howell:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

Diffculty
Easy

Similar Problems

Analysis

非递归算法: 1、交换根节点的左右子节点 2、交换第二层每个节点的左右子节点

涉及到层次遍历一般都要考虑到用queue去保存当前层节点 涉及到深度优先遍历一般都要考虑到用stack去保存节点信息

Solutions

1、非递归解法(queue)

TreeNode* invertTree2(TreeNode* root) {
    queue<TreeNode*> tree_queue;
    if (root == nullptr)
        return root;
    tree_queue.push(root);
    while(tree_queue.size() > 0){
        TreeNode * pNode = tree_queue.front();
        tree_queue.pop();
        TreeNode * tmp = pNode->left;
        pNode->left = pNode->right;
        pNode->right = tmp;
        if (pNode->left != nullptr)
            tree_queue.push(pNode->left);
        if (pNode->right != nullptr)
            tree_queue.push(pNode->right);
    }
    return root;
}

2、递归算法 (1) 交换根节点的左右子树 (2) 对左右子树分别执行递归反转

Node* invertTree(Node* root){
    if(root == nullptr) return root;
    Node* tmp = root->left;
    root->left = invertTree(root->right);
    root->right = invertTree(tmp);
    return root;
}

results matching ""

    No results matching ""