226. 翻轉(zhuǎn)二叉樹霜浴、116. 填充每個節(jié)點的下一個右側(cè)節(jié)點指針晶衷、114. 二叉樹展開為鏈表

226. 翻轉(zhuǎn)二叉樹

翻轉(zhuǎn)一棵二叉樹。

解題思路及方法

這道題很簡單坷随,可以作為剛刷二叉樹的基礎(chǔ)題房铭,解法就是普通的遞歸驻龟。交換根節(jié)點的左右子結(jié)點温眉,然后一直遞歸調(diào)用直到遍歷完整棵樹。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        // 交換左右節(jié)點
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        // 遞歸交換子節(jié)點
        invertTree(root.left);
        invertTree(root.right);

        return root;
    }
}

結(jié)果如下:

116. 填充每個節(jié)點的下一個右側(cè)節(jié)點指針

給定一個 完美二叉樹 翁狐,其所有葉子節(jié)點都在同一層类溢,每個父節(jié)點都有兩個子節(jié)點。二叉樹定義如下:

struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每個 next 指針露懒,讓這個指針指向其下一個右側(cè)節(jié)點闯冷。如果找不到下一個右側(cè)節(jié)點,則將 next 指針設(shè)置為 NULL懈词。

初始狀態(tài)下蛇耀,所有 next 指針都被設(shè)置為 NULL。

進(jìn)階:

你只能使用常量級額外空間坎弯。
使用遞歸解題也符合要求纺涤,本題中遞歸程序占用的椧朐荩空間不算做額外的空間復(fù)雜度。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有撩炊。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)外永,非商業(yè)轉(zhuǎn)載請注明出處。

解題方法及思路

首先我們要清楚什么是一棵完美二叉樹拧咳,完美二叉樹就是一棵滿的二叉樹伯顶,也就是非葉結(jié)點都有兩個子結(jié)點,即都是二叉的骆膝。搞清楚定義就好解了祭衩。

觀察示例,其實就是將子結(jié)點的右子結(jié)點接在左子結(jié)點的后面谭网。這么想是對的汪厨,但是不全對,觀察結(jié)點5和6愉择,它們并非一個結(jié)點的左右子結(jié)點劫乱,所以還要考慮這種情況。

編寫一個輔助函數(shù)來鏈接子結(jié)點锥涕,參數(shù)為兩個結(jié)點衷戈。將傳入的兩個結(jié)點的左右子結(jié)點鏈接,再將第一個結(jié)點的右子結(jié)點和第二個結(jié)點的左子結(jié)點鏈接层坠,一直遞歸即可殖妇。

/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;

    public Node() {}
    
    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, Node _left, Node _right, Node _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
*/

class Solution {
    public Node connect(Node root) {
        if (root == null) {
            return null;
        }
        // 鏈接
        connectTwoNode(root.left, root.right);

        return root;
    }

    public void connectTwoNode(Node node1, Node node2) {
        if (node1 == null || node2 == null) {
            return;
        }
        // 鏈接傳入根節(jié)點
        node1.next = node2;
        // 鏈接傳入結(jié)點子節(jié)點
        connectTwoNode(node1.left, node1.right);
        connectTwoNode(node2.left, node2.right);
        // 鏈接傳入結(jié)點右子樹和左子樹
        connectTwoNode(node1.right, node2.left);
    }
}

結(jié)果如下:

114. 二叉樹展開為鏈表

給你二叉樹的根結(jié)點 root ,請你將它展開為一個單鏈表:

展開后的單鏈表應(yīng)該同樣使用 TreeNode 破花,其中 right 子指針指向鏈表中下一個結(jié)點谦趣,而左子指針始終為 null 。
展開后的單鏈表應(yīng)該與二叉樹 先序遍歷 順序相同座每。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有前鹅。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處峭梳。

解題思路及方法

同樣是遞歸舰绘,將子結(jié)點拉成鏈表。因為要求是先序遍歷的順序葱椭,所以遞歸函數(shù)的寫法是先遞歸捂寿,再處理。處理過程是將當(dāng)前結(jié)點的左右子樹存入一個臨時變量,然后將左子樹為空,將之前存入變量的左子樹賦給當(dāng)前右子樹滋早,再將之前存入右子樹的變量接在現(xiàn)在右子樹的右邊,形成一個鏈表驳概。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public void flatten(TreeNode root) {
        if (root == null) {
            return;
        }
        // 遞歸將子結(jié)點拉成鏈表
        flatten(root.left);
        flatten(root.right);

        // 將傳入結(jié)點與子結(jié)點拉成鏈表
        TreeNode left = root.left;
        TreeNode right = root.right;

        root.left = null;
        root.right = left;

        // 將原先的右子樹接到當(dāng)前右子樹的末端
        TreeNode p = root;
        while (p.right != null) {
            p = p.right;
        }
        p.right = right;
    }
}

結(jié)果如下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粪小,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抡句,更是在濱河造成了極大的恐慌探膊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件待榔,死亡現(xiàn)場離奇詭異逞壁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锐锣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門腌闯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雕憔,你說我怎么就攤上這事姿骏。” “怎么了斤彼?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵分瘦,是天一觀的道長。 經(jīng)常有香客問我琉苇,道長嘲玫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任并扇,我火速辦了婚禮去团,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘穷蛹。我一直安慰自己土陪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布肴熏。 她就那樣靜靜地躺著鬼雀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扮超。 梳的紋絲不亂的頭發(fā)上取刃,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天蹋肮,我揣著相機(jī)與錄音出刷,去河邊找鬼。 笑死坯辩,一個胖子當(dāng)著我的面吹牛馁龟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漆魔,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坷檩,長吁一口氣:“原來是場噩夢啊……” “哼却音!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矢炼,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤系瓢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后句灌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夷陋,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年胰锌,在試婚紗的時候發(fā)現(xiàn)自己被綠了骗绕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡资昧,死狀恐怖酬土,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情格带,我是刑警寧澤撤缴,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站叽唱,受9級特大地震影響腹泌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尔觉,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一凉袱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侦铜,春花似錦专甩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贡未,卻和暖如春种樱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俊卤。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工嫩挤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人消恍。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓岂昭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狠怨。 傳聞我的和親對象是個殘疾皇子约啊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

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