LeetCode算法 | Day17 二叉樹:平衡二叉樹牡昆、二叉樹的所有路徑姚炕、左葉子之和

110. 平衡二叉樹

題目:

給定一個二叉樹,判斷它是否是高度平衡的二叉樹丢烘。
本題中柱宦,一棵高度平衡二叉樹定義為:一個二叉樹每個節(jié)點 的左右兩個子樹的高度差的絕對值不超過 1 。
示例:


輸入:root = [3,9,20,null,null,15,7]
輸出:true

解題思路:

平衡二叉樹需要比較的是高度播瞳,所以使用后序遍歷掸刊,遞歸三部曲:

  1. 明確遞歸函數(shù)的參數(shù)和返回值:參數(shù)是當(dāng)前傳入節(jié)點,返回值是以當(dāng)前傳入節(jié)點為根節(jié)點的樹的高度赢乓。
  2. 明確終止條件:遞歸的過程中依然是遇到空節(jié)點了為終止忧侧,返回0,表示當(dāng)前節(jié)點為根節(jié)點的樹高度為0牌芋。
  3. 明確單層遞歸的邏輯:分別求出其左右子樹的高度苍柏,然后如果差值小于等于1,則返回當(dāng)前二叉樹的高度姜贡,否則返回-1,表示已經(jīng)不是二叉平衡樹了棺棵。如果已經(jīng)有一邊子樹的高度是-1楼咳,那就直接向上返回-1直到最上層。
var isBalanced = function (root) {
    const getHeight = (node) => {
        if (!node) {
            return 0;
        }
        const leftHeight = getHeight(node.left);
        if (leftHeight === -1) {
            return -1;
        }
        const rightHeight = getHeight(node.right);
        if (rightHeight === -1) {
            return -1;
        }
        if (Math.abs(leftHeight - rightHeight) > 1) {
            return -1;
        }
        return 1 + Math.max(leftHeight, rightHeight);
    }
    const res = getHeight(root);
    return res === -1 ? false : true;
};

257. 二叉樹的所有路徑

題目:

給你一個二叉樹的根節(jié)點 root 烛恤,按 任意順序 母怜,返回所有從根節(jié)點到葉子節(jié)點的路徑。
葉子節(jié)點 是指沒有子節(jié)點的節(jié)點缚柏。
示例:


輸入:root = [1,2,3,null,5]
輸出:["1->2->5","1->3"]

解題思路:

這道題目要求從根節(jié)點到葉子的路徑苹熏,所以需要前序遍歷,這樣才方便讓父節(jié)點指向孩子節(jié)點币喧,找到對應(yīng)的路徑轨域。在這個過程中,要不斷回溯到上層節(jié)點來找下一條路徑杀餐。
根據(jù)遞歸三部曲:

  1. 確定遞歸函數(shù)的參數(shù)和返回值:傳入根節(jié)點即可干发,路徑可以用閉包的形式來記錄。
  2. 確定遞歸終止條件:這道題不需要到為null的節(jié)點史翘,只要到葉子結(jié)點即可枉长。
  3. 確定單層遞歸邏輯:因為是前序遍歷所以要先處理中間節(jié)點冀续,中間節(jié)點要在加入完整路徑之前就加入到路徑數(shù)組中。之后判斷左右子樹需要對節(jié)點是否為空做判斷必峰,因為前置沒有過濾空節(jié)點的情況洪唐,最后還需要注意在遞歸完成后對路徑數(shù)組進行pop來回溯到上層節(jié)點。
var binaryTreePaths = function (root) {
    if (!root) {
        return [];
    }
    const res = [];
    const path = [];
    const traversal = (node) => {
        path.push(node.val);
        if (node.left === null && node.right === null) {
            res.push(path.join('->'));
            return;
        }
        if (node.left) {
            traversal(node.left);
            path.pop();
        }
        if (node.right) {
            traversal(node.right);
            path.pop();
        }
    }
    traversal(root);
    return res;
};

404. 左葉子之和

題目:

給定二叉樹的根節(jié)點 root 吼蚁,返回所有左葉子之和凭需。
示例:


輸入: root = [3,9,20,null,null,15,7] 
輸出: 24 
解釋: 在這個二叉樹中,有兩個左葉子桂敛,分別是 9 和 15功炮,所以返回 24

解題思路:

左葉子結(jié)點是左孩子不為空但是左孩子的左右孩子都為空,這種情況下的左孩子就是左葉子結(jié)點术唬。這道題因為需要一層一層的向上來傳遞加和薪伏,所以還是使用后序遍歷。
遞歸三部曲:

  1. 確定遞歸函數(shù)的參數(shù)和返回值:傳入樹的根節(jié)點粗仓,返回左葉子數(shù)值之和嫁怀。
  2. 確定終止條件:遍歷到空節(jié)點,左葉子值為0借浊。遍歷到葉子結(jié)點塘淑,左葉子值也會是0。
  3. 確定單層遞歸的邏輯:遍歷到左葉子節(jié)點的時候記錄數(shù)值蚂斤,右葉子節(jié)點可以直接取遞歸的值存捺。
var sumOfLeftLeaves = function (root) {
    const traversal = (node) => {
        if (!node) {
            return 0;
        }
        if (node.left === null && node.right === null) {
            return 0;
        }
        let leftNum = traversal(node.left);
        if (node.left !== null && node.left.left === null && node.left.right === null) {
            leftNum = node.left.val;
        }
        let rightNum = traversal(node.right);
        const sum = leftNum + rightNum;
        return sum;
    }
    return traversal(root);
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市曙蒸,隨后出現(xiàn)的幾起案子捌治,更是在濱河造成了極大的恐慌,老刑警劉巖纽窟,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肖油,死亡現(xiàn)場離奇詭異,居然都是意外死亡臂港,警方通過查閱死者的電腦和手機森枪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來审孽,“玉大人县袱,你說我怎么就攤上這事∮恿Γ” “怎么了显拳?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搓萧。 經(jīng)常有香客問我杂数,道長宛畦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任揍移,我火速辦了婚禮次和,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘那伐。我一直安慰自己踏施,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布罕邀。 她就那樣靜靜地躺著畅形,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诉探。 梳的紋絲不亂的頭發(fā)上日熬,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音肾胯,去河邊找鬼竖席。 笑死,一個胖子當(dāng)著我的面吹牛敬肚,可吹牛的內(nèi)容都是我干的毕荐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼艳馒,長吁一口氣:“原來是場噩夢啊……” “哼憎亚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弄慰,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虽填,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后曹动,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡牲览,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年墓陈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片第献。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡贡必,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庸毫,到底是詐尸還是另有隱情仔拟,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布飒赃,位于F島的核電站利花,受9級特大地震影響科侈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炒事,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一臀栈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挠乳,春花似錦权薯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卖怜,卻和暖如春屎开,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背韧涨。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工牍戚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虑粥。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓如孝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親娩贷。 傳聞我的和親對象是個殘疾皇子第晰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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