题目链接:https://leetcode.com/problems/invert-binary-tree/
题目内容:
Invert a binary tree.
4 / \ 2 7 / \ / \ 1 3 6 9to
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; } } };