[Leetcode 題解 / 226] Invert Binary Tree

Homebrew是OS X平臺(tái)上的包管理工具虏两,在用Mac的程序員基本都知道這個(gè)工具漩绵。
HomeBrew的開發(fā)者是Max Howell左胞。然而面試谷歌時(shí)卻蛋疼了。Max Howell在Twitter發(fā)帖:


twitter

可見橱赠,會(huì)手寫反轉(zhuǎn)二叉樹多么重要。正好Leetcode上有這個(gè)題目箫津,下面進(jìn)入正題狭姨。

二叉樹是數(shù)據(jù)結(jié)構(gòu)里一個(gè)重要的概念。
而反轉(zhuǎn)二叉樹的基本意思就是下圖這樣苏遥。
Invert a binary tree.

     4
   /   \
  2     7
 / \   / \
1   3 6   9

to:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

每一個(gè)節(jié)點(diǎn)的左右子樹對(duì)換饼拍,左右子樹的左右節(jié)點(diǎn)也需要交換,這種時(shí)候很容易想到的就是遞歸的方法田炭。
下面是在Leetcode 通過(guò)的C++代碼:

/**
 * 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) {
        TreeNode* tmp;
        if(!root)
            return NULL;
        if(root->left)
            root->left=invertTree(root->left);
        if(root->right)
            root->right=invertTree(root->right);
        tmp=root->left;
        root->left=root->right;
        root->right=tmp;
        return root;     
    }
};

至于非遞歸的做法也很簡(jiǎn)單师抄,借助一個(gè)隊(duì)列就可以實(shí)現(xiàn),在C++里教硫,直接使用標(biāo)準(zhǔn)庫(kù)的queue就可以叨吮。
首先取根節(jié)點(diǎn)入隊(duì)辆布,再出隊(duì),交換它的左右節(jié)點(diǎn)茶鉴,再將左右節(jié)點(diǎn)入隊(duì)锋玲,這樣就可以以層次遍歷的方法,處理每一層的節(jié)點(diǎn)涵叮。

/**
 * 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) {
        queue<TreeNode *> node_queue;
        
        if(root == NULL)
            return root;
        node_queue.push(root);
        while(node_queue.size()>0) 
        {
            TreeNode* pFrontNode = node_queue.front();
            node_queue.pop();
            TreeNode *tmp = pFrontNode->left;
            pFrontNode->left = pFrontNode->right;
            pFrontNode->right = tmp;
            if(pFrontNode->left)
                node_queue.push(pFrontNode->left);
            if(pFrontNode->right)
                node_queue.push(pFrontNode->right);
        }
        return root;
        
    }
};

最近在看Python惭蹂,用Python實(shí)現(xiàn)也一樣,遞歸解法:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if root is None:
            return None
        root.left,root.right = self.invertTree(root.right),self.invertTree(root.left)
        return root
        

非遞歸

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        queue = collections.deque()
        if root:
            queue.append(root)
        while queue:
            node = queue.popleft()
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
            node.left,node.right = node.right,node.left
        return root
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末割粮,一起剝皮案震驚了整個(gè)濱河市盾碗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舀瓢,老刑警劉巖廷雅,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異氢伟,居然都是意外死亡榜轿,警方通過(guò)查閱死者的電腦和手機(jī)幽歼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門朵锣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人甸私,你說(shuō)我怎么就攤上這事诚些。” “怎么了皇型?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵诬烹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我弃鸦,道長(zhǎng)绞吁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任唬格,我火速辦了婚禮家破,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘购岗。我一直安慰自己汰聋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布喊积。 她就那樣靜靜地躺著烹困,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乾吻。 梳的紋絲不亂的頭發(fā)上髓梅,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天拟蜻,我揣著相機(jī)與錄音,去河邊找鬼枯饿。 笑死瞭郑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸭你。 我是一名探鬼主播屈张,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼袱巨!你這毒婦竟也來(lái)了阁谆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤愉老,失蹤者是張志新(化名)和其女友劉穎场绿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫉入,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焰盗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咒林。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熬拒。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垫竞,靈堂內(nèi)的尸體忽然破棺而出澎粟,到底是詐尸還是另有隱情,我是刑警寧澤欢瞪,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布活烙,位于F島的核電站,受9級(jí)特大地震影響遣鼓,放射性物質(zhì)發(fā)生泄漏啸盏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一骑祟、第九天 我趴在偏房一處隱蔽的房頂上張望回懦。 院中可真熱鬧,春花似錦曾我、人聲如沸粉怕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贫贝。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稚晚,已是汗流浹背崇堵。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留客燕,地道東北人鸳劳。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像也搓,于是被迫代替她去往敵國(guó)和親赏廓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員)傍妒,僅算法題幔摸,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,817評(píng)論 2 36
  • 二叉樹的定義#### 二叉樹是n(n>=0)個(gè)具有相同類型的元素的有限集合,當(dāng)n=0時(shí)稱為空二叉樹颤练,當(dāng)n>0時(shí)既忆,數(shù)...
    kylinxiang閱讀 1,403評(píng)論 0 2
  • 1 序 2016年6月25日夜,帝都嗦玖,天下著大雨患雇,拖著行李箱和同學(xué)在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,108評(píng)論 0 12
  • 總結(jié) 想清楚再編碼 分析方法:舉例子宇挫、畫圖 第1節(jié):畫圖分析方法 對(duì)于二叉樹苛吱、二維數(shù)組、鏈表等問題捞稿,都可以采用畫圖...
    M_巴拉巴拉閱讀 1,211評(píng)論 0 7
  • 去年二叉樹算法的事情鬧的沸沸揚(yáng)揚(yáng)又谋,起因是Homebrew 的作者 @Max Howell 在 twitter 上發(fā)...
    Masazumi柒閱讀 1,606評(píng)論 0 8