leetCode 226. Invert Binary Tree

来源:互联网 发布:淘宝搜索的算法 编辑:程序博客网 时间:2024/05/01 14:33

    题目链接: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;        }    }};


0 0
原创粉丝点击