二叉樹(shù)2-平衡二叉樹(shù)趁曼、完全二叉樹(shù)军浆、二叉樹(shù)剪枝

110.平衡二叉樹(shù)

給定一個(gè)二叉樹(shù)棕洋,判斷它是否是高度平衡的二叉樹(shù)挡闰。

一棵高度平衡二叉樹(shù)定義為:
一個(gè)二叉樹(shù)每個(gè)節(jié)點(diǎn) 的左右兩個(gè)子樹(shù)的高度差的絕對(duì)值不超過(guò) 1 。

思路:自頂向下遞歸
在求二叉樹(shù)的高度基礎(chǔ)上掰盘,向上逐步判斷子樹(shù)是否高度差小于1摄悯。

    int height(TreeNode* root)//求二叉樹(shù)的高度
    {
        if(!root)
            return 0;
        return max(height(root->left),height(root->right))+1;
    }
    bool isBalanced(TreeNode* root) {
        if(!root)
            return true;
        else{
            int h_left=height(root->left);//分別求得左右子樹(shù)的高度
            int h_right=height(root->right);
            return (abs(h_left-h_right)<=1)&&isBalanced(root->left)&&isBalanced(root->right);
        }
    }

222.完全二叉樹(shù)

通用方法,沒(méi)體現(xiàn)出完全二叉樹(shù)特點(diǎn)

return countNodes(root->left) + countNodes(root->right) + 1;

使用特征愧捕,算到倒數(shù)第二層

class Solution {
public:
    int countNodes(TreeNode* root) {
        if(!root)
            return 0;
        queue<TreeNode*> q;
        int n=0;
        q.push(root);
        while(!q.empty())
        {
            int l=q.size();
            for(int i=0;i<l;i++)
            {
                TreeNode *tmp=q.front();
                q.pop();
                n++;
                if(!tmp->left&&!tmp->right)
                    return n*2-1;
                else if(!tmp->right)
                    return n*2;
                q.push(tmp->left);
                q.push(tmp->right);
            }
        }
        return n;
    }
};

814. 二叉樹(shù)剪枝

給定二叉樹(shù)根結(jié)點(diǎn) root 奢驯,此外樹(shù)的每個(gè)結(jié)點(diǎn)的值要么是 0,要么是 1次绘。
返回移除了所有不包含 1 的子樹(shù)的原二叉樹(shù)瘪阁。
( 節(jié)點(diǎn) X 的子樹(shù)為 X 本身撒遣,以及所有 X 的后代。)
錯(cuò)誤代碼:

class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        if(!root)
            return root;
        root->left=pruneTree(root->left);//左子樹(shù)剪枝
        root->right=pruneTree(root->right);//右子樹(shù)剪枝
        //根節(jié)點(diǎn)
        if(!root->left&&!root->right)
        {
            if(root->val==0)
            return nullptr;
            else
            return root;
        }
        else if(!root->left)
        {
            if(root->val+root->right->val==0)
            root->right=nullptr;
            return root; 
        }
        else if(!root->right)
        {
            if(root->val+root->left->val==0)
            root->left=nullptr;
            return root;
        }
        else{
            if(root->val+root->right->val+root->left->val==0)
            root=nullptr;
            return root;
        }
    }
};

錯(cuò)誤原因:沒(méi)找到遞歸的最后一層管跺。
正確代碼:

class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        if(!root)
            return root;
        root->left=pruneTree(root->left);//左子樹(shù)剪枝
        root->right=pruneTree(root->right);//右子樹(shù)剪枝
        //根節(jié)點(diǎn)
        if(!root->left&&!root->right&&!root->val)
        {
            return nullptr;
        }
        return root;
    }
};

這道題可以歸結(jié)為遞歸子樹(shù)問(wèn)題义黎,求解時(shí),先分別處理好左右子樹(shù)豁跑,然后處理根節(jié)點(diǎn)廉涕。
本題中,由于左右子樹(shù)已經(jīng)經(jīng)過(guò)剪枝處理艇拍,只需要判斷根節(jié)點(diǎn)是否需要剪枝狐蜕,即只需判定根節(jié)點(diǎn)及其左右子樹(shù)是否包含1。
由于左右子樹(shù)已經(jīng)經(jīng)過(guò)剪枝處理卸夕,可以判定层释,左右子樹(shù)一定包含1.所以如果左右子樹(shù)存在的話,根節(jié)點(diǎn)一定不用剪枝快集;如果左右子樹(shù)不存在湃累,而且根節(jié)點(diǎn)為0,此時(shí)需要剪掉根節(jié)點(diǎn)碍讨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末治力,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勃黍,更是在濱河造成了極大的恐慌宵统,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件覆获,死亡現(xiàn)場(chǎng)離奇詭異马澈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)弄息,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)痊班,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人摹量,你說(shuō)我怎么就攤上這事涤伐。” “怎么了缨称?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵凝果,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我睦尽,道長(zhǎng)器净,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任当凡,我火速辦了婚禮山害,結(jié)果婚禮上纠俭,老公的妹妹穿的比我還像新娘。我一直安慰自己浪慌,他們只是感情好柑晒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著眷射,像睡著了一般匙赞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妖碉,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天涌庭,我揣著相機(jī)與錄音,去河邊找鬼欧宜。 笑死坐榆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冗茸。 我是一名探鬼主播席镀,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼夏漱!你這毒婦竟也來(lái)了豪诲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挂绰,失蹤者是張志新(化名)和其女友劉穎屎篱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體葵蒂,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡交播,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了践付。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秦士。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖永高,靈堂內(nèi)的尸體忽然破棺而出隧土,到底是詐尸還是另有隱情,我是刑警寧澤乏梁,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布次洼,位于F島的核電站关贵,受9級(jí)特大地震影響遇骑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揖曾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一落萎、第九天 我趴在偏房一處隱蔽的房頂上張望亥啦。 院中可真熱鬧,春花似錦练链、人聲如沸翔脱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)届吁。三九已至,卻和暖如春绿鸣,著一層夾襖步出監(jiān)牢的瞬間疚沐,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工潮模, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亮蛔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓擎厢,卻偏偏與公主長(zhǎng)得像究流,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子动遭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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