• [LeetCode] Invert Binary Tree


    After reading the quote below the problem, you will be motivated to solve it immediately :-) Well, indeed it is also relative easy. The process of inverting a binary tree is simply 3 steps:

    1. Swap the left subtree and the right subtree;
    2. Invert the left subtree;
    3. Invert the right subtree.

    So we immediately have the following simple recursive solution.

     1 class Solution {
     2 public:
     3     TreeNode* invertTree(TreeNode* root) {
     4         if (!root) return NULL;
     5         swap(root -> left, root -> right);
     6         root -> left = invertTree(root -> left);
     7         root -> right = invertTree(root -> right);
     8         return root;
     9     }
    10 };

    Well, you may also want to challenge yourself to solve it iteratively. The iterative solution is basically a level-order traversal. Push all the nodes of the same level to a queue and then swap their left subtree and right subtree and iterate over their subtrees.

    The code is as follows.

     1 class Solution {
     2 public:
     3     TreeNode* invertTree(TreeNode* root) {
     4         if (!root) return NULL;
     5         queue<TreeNode*> level;
     6         level.push(root);
     7         while (!level.empty()) {
     8             TreeNode* node = level.front();
     9             level.pop();
    10             swap(node -> left, node -> right);
    11             if (node -> left) level.push(node -> left);
    12             if (node -> right) level.push(node -> right);
    13         }
    14         return root; 
    15     }
    16 };
  • 相关阅读:
    bzoj4849: [Neerc2016]Mole Tunnels
    bzoj 4069~4071 APIO2015
    bzoj 4885: [Lydsy2017年5月月赛]长方体
    bzoj4891: [Tjoi2017]龙舟
    bzoj4892: [Tjoi2017]dna
    bzoj 3159: 决战
    bzoj3672: [Noi2014]购票
    bzoj4738: 汽水
    bzoj 4737: 组合数问题
    bzoj 4872: [Shoi2017]分手是祝愿
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4572106.html
Copyright © 2020-2023  润新知