【LeetCode】226. Invert Binary Tree(C++)

Invert a binary tree.

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

to

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

这道题我是用递归求解的,代码如下:

代码:(递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        TreeNode *cur,*temp;
        if(root==NULL)
            return NULL;
        cur=root;
        temp=cur->left;
        cur->left=cur->right;
        cur->right=temp;
        cur->left=invertTree(cur->left);
        cur->right=invertTree(cur->right);
        return cur;
    }
};

提交中给出的另外一种方法不需要递归,而需要用一个队列存储当前节点。

代码:(queue)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        
        // base case i)
        if (root == NULL) return NULL;

        // use auxiliary data structure, in this case queue chosen
        std::queue<TreeNode *> q;

        q.push(root);

        while (!q.empty())
        {
            // fetch current queue size
            int size = q.size();

            // current level of the binary tree contains at least one node or more
            while (size > 0)
            {
                TreeNode *first = q.front();

                // swap OP.
                // local data O(1) In Place
                TreeNode *temp = first->left; // remember
                first->left = first->right;
                first->right = temp;

                q.pop();

                if (first->left != NULL)
                    q.push(first->left);

                if (first->right != NULL)
                    q.push(first->right);

                // one pop, one decrement
                size = size - 1;
            }
            // level by level
        }

        return root;       
        
    }
};

猜你喜欢

转载自blog.csdn.net/biongbiongdou/article/details/80232324