leetCode 226. Invert Binary Tree

    题目链接:https://leetcode.com/problems/invert-binary-tree/

    题目内容:

Invert a binary tree.

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

    题目分析:

    当然AC觉得这是道很简单的题,是自己想复杂了(人家本身就放在easy程度的=.=)。一开始我的想法除了考虑空指针这些问题(必须的啦~),还考虑了如果两棵子树都是空就不用操作了、如果一棵为空一棵不为空,那就只操作不为空的那棵、如果两棵都不为空那就先判断两棵子树的值是否相等,相等就不交换不相等再交换值然后递归每棵子树...的确,个人感觉如果考虑上面的想法的话,效率应该会比下面贴出的AC的代码更好一点点,因为免去了一些不必要的交换,但同时也增加了代码的长度和杂乱度,而且难免会有漏掉的情况。后来撸了一发冷静下来之后,觉得不需要考虑这么复杂,无论值相不相等,无论是否一棵为空,都统统交换了再说,left指针指向right,right指针指向left,然后递归下去。代码一下子就AC了,去看一下耗时,跟大部分人一样0ms通过,那些效率更高的应该就是使用dfs或者bfs迭代实现的版本了。BTW,讨论区中大家的想法不仅差不多,有一份连代码都跟我一样,甚至连变量名temp都一样,程序猴也是醉醉的~

/**
 * 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) {
        if(root == NULL) return NULL;
        else{
            TreeNode* temp = root->left;
            root->left = root->right;
            root->right = temp;
            invertTree(root->left);
            invertTree(root->right);
            return root;
        }
    }
};


你可能感兴趣的:(LeetCode)