p27 翻转二叉树 (leetcode 226)

一:解题思路

这道题目有2种做法。

解法一:利用递归的方法来做。

解法二:利用一个辅助队列,用迭代的方法来做。2种方法的时间复杂度,和空间复杂度都为:O(n)

二:完整代码示例 (C++版和Java版)

递归版C++:

class Solution 
{
public:
    TreeNode* invertTree(TreeNode* root) 
    {
        if (root == NULL) return root;

        TreeNode* node = root;
        TreeNode* temp = node->left;
        node->left = node->right;
        node->right = temp;

        invertTree(node->left);
        invertTree(node->right);

        return root;
    }
};

递归版Java:

class Solution {
   public TreeNode invertTree(TreeNode root)
    {
        if (root == null) return root;

        TreeNode node = root;
        TreeNode temp = node.left;
        node.left = node.right;
        node.right = temp;

        invertTree(node.left);
        invertTree(node.right);

        return root;
    }
}

迭代版C++:

class Solution 
{
public:
    TreeNode* invertTree(TreeNode* root) 
    {
        if (root == NULL) return root;

        queue<TreeNode*> queue;
        queue.push(root);

        while (!queue.empty())
        {
            TreeNode* node = queue.front();
            queue.pop();

            TreeNode* temp = node->left;
            node->left = node->right;
            node->right = temp;

            if (node->left != NULL)  queue.push(node->left);
            if (node->right != NULL) queue.push(node->right);
        }

        return root;
    }
};

迭代版Java:

class Solution {
   public TreeNode invertTree(TreeNode root)
    {
        if (root == null) return root;

        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        
        while(!queue.isEmpty())
        {
            TreeNode node=queue.poll();
            
            TreeNode temp=node.left;
            node.left=node.right;
            node.right=temp;
            
            if(node.left!=null) queue.add(node.left);
            if(node.right!=null) queue.add(node.right);
        }

        return root;
    }
}

 

posted @ 2020-03-13 15:28  repinkply  阅读(130)  评论(0)    收藏  举报