題目鏈接: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;
}
}
};