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