[Leetcode] 85. Populating Next Right Pointers in Each Node

題目

Given a binary tree

struct TreeLinkNode {
  TreeLinkNode *left;
  TreeLinkNode *right;
  TreeLinkNode *next;
}

Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.

Initially, all next pointers are set to NULL.

Note:

You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).

For example,
Given the following perfect binary tree,

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

After calling your function, the tree should look like:

     1 -> NULL
   /  \
  2 -> 3 -> NULL
 / \  / \
4->5->6->7 -> NULL

解題之法

/**
 * Definition for binary tree with next pointer.
 * struct TreeLinkNode {
 *  int val;
 *  TreeLinkNode *left, *right, *next;
 *  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
 * };
 */
// Recursion, more than constant space
class Solution {
public:
    void connect(TreeLinkNode *root) {
        if (!root) return;
        if (root->left) root->left->next = root->right;
        if (root->right) root->right->next = root->next? root->next->left : NULL;
        connect(root->left);
        connect(root->right);
    }
};

分析

這道題實(shí)際上是樹的層序遍歷的應(yīng)用访敌,既然是遍歷,就有遞歸和非遞歸兩種方法,最好兩種方法都要掌握,都要會(huì)寫。下面來看遞歸的解法愁铺,由于是完全二叉樹,所以若節(jié)點(diǎn)的左子結(jié)點(diǎn)存在的話,其右子節(jié)點(diǎn)必定存在独柑,所以左子結(jié)點(diǎn)的next指針可以直接指向其右子節(jié)點(diǎn),對(duì)于其右子節(jié)點(diǎn)的處理方法是私植,判斷其父節(jié)點(diǎn)的next是否為空忌栅,若不為空,則指向其next指針指向的節(jié)點(diǎn)的左子結(jié)點(diǎn)曲稼,若為空則指向NULL索绪。

下面是迭代的方法:

class Solution {
public:
    void connect(TreeLinkNode *root) {
        if (!root) return;
        TreeLinkNode *start = root, *cur = NULL;
        while (start->left) {
            cur = start;
            while (cur) {
                cur->left->next = cur->right;
                if (cur->next) cur->right->next = cur->next->left;
                cur = cur->next;
            }
            start = start->left;
        }
    }
};

題目中要求用O(1)的空間復(fù)雜度,所以上面這種方法碉堡了贫悄。用兩個(gè)指針start和cur瑞驱,其中start標(biāo)記每一層的起始節(jié)點(diǎn),cur用來遍歷該層的節(jié)點(diǎn)窄坦,設(shè)計(jì)思路之巧妙唤反,不得不服啊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鸭津,隨后出現(xiàn)的幾起案子彤侍,更是在濱河造成了極大的恐慌,老刑警劉巖逆趋,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盏阶,死亡現(xiàn)場離奇詭異,居然都是意外死亡闻书,警方通過查閱死者的電腦和手機(jī)般哼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惠窄,“玉大人蒸眠,你說我怎么就攤上這事「巳冢” “怎么了楞卡?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我蒋腮,道長淘捡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任池摧,我火速辦了婚禮焦除,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘作彤。我一直安慰自己膘魄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布竭讳。 她就那樣靜靜地躺著创葡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绢慢。 梳的紋絲不亂的頭發(fā)上灿渴,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音胰舆,去河邊找鬼骚露。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缚窿,可吹牛的內(nèi)容都是我干的荸百。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼滨攻,長吁一口氣:“原來是場噩夢啊……” “哼够话!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起光绕,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤女嘲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后诞帐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欣尼,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年停蕉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愕鼓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡慧起,死狀恐怖菇晃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚓挤,我是刑警寧澤磺送,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布驻子,位于F島的核電站,受9級(jí)特大地震影響估灿,放射性物質(zhì)發(fā)生泄漏崇呵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一馅袁、第九天 我趴在偏房一處隱蔽的房頂上張望域慷。 院中可真熱鬧,春花似錦汗销、人聲如沸犹褒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至估脆,卻和暖如春钦奋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疙赠。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工付材, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人圃阳。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓厌衔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捍岳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子富寿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • 課程介紹 先修課:概率統(tǒng)計(jì),程序設(shè)計(jì)實(shí)習(xí)锣夹,集合論與圖論 后續(xù)課:算法分析與設(shè)計(jì)页徐,編譯原理,操作系統(tǒng)银萍,數(shù)據(jù)庫概論变勇,人...
    ShellyWhen閱讀 2,290評(píng)論 0 3
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,747評(píng)論 0 33
  • 第一章 緒論 什么是數(shù)據(jù)結(jié)構(gòu)贴唇? 數(shù)據(jù)結(jié)構(gòu)的定義:數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合搀绣。 第二章...
    SeanCheney閱讀 5,775評(píng)論 0 19
  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個(gè)結(jié)點(diǎn)至多有m個(gè)孩子。 除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外戳气,其它每個(gè)結(jié)點(diǎn)至少有m...
    文檔隨手記閱讀 13,230評(píng)論 0 25
  • //leetcode中還有花樣鏈表題链患,這里幾個(gè)例子,冰山一角 求單鏈表中結(jié)點(diǎn)的個(gè)數(shù)----時(shí)間復(fù)雜度O(n)這是最...
    暗黑破壞球嘿哈閱讀 1,520評(píng)論 0 6