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;
        }
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章