二叉樹(shù)層級(jí)遍歷

From 【左程云面試算法精品課】


二叉樹(shù)層級(jí)遍歷
class Node(object):
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

def create_tree():
    t1 = Node(1)
    t2 = Node(2)
    t3 = Node(3)
    t4 = Node(4)
    t5 = Node(5)
    t6 = Node(6)
    t7 = Node(7)
    t8 = Node(8)
    t1.left = t2
    t2.left = t4
    t1.right = t3
    t2.right = t5
    t3.right = t6
    t5.left = t7
    t5.right = t8   
    return t1

如果層序遍歷撕阎,直接用一個(gè)隊(duì)列即可:

def printQ(root):
    queue = []
    lit = []
    queue.append(root)
    while queue:
        out = queue.pop(0)
        lit.append(out.val)
        if out.left:
            queue.append(out.left)
        if out.right:
            queue.append(out.right)
    print " ".join(map(str, lit))
    return

但是如果要去按層輸出热押,每層一行,該怎么辦事扭?
用兩個(gè)變量last和nlast分別記錄當(dāng)前行最右邊的節(jié)點(diǎn)捎稚,和檢測(cè)到的下一行的最右邊的節(jié)點(diǎn)。
每次從二叉樹(shù)拿出一個(gè)節(jié)點(diǎn)進(jìn)入隊(duì)列中,更新nlast為該節(jié)點(diǎn)阳藻。當(dāng)這一層的節(jié)點(diǎn)都進(jìn)入隊(duì)列晰奖,就依次彈出節(jié)點(diǎn)打印谈撒,并判斷彈出節(jié)點(diǎn)是否等于last腥泥。
當(dāng)彈出節(jié)點(diǎn) == last時(shí),說(shuō)明這一行已經(jīng)打印完畢啃匿,令last=nlast,開(kāi)始打印下一行蛔外。

def printS(root):
    queue = []
    last = root
    nlast = root
    queue.append(root)
    lit = []
    while queue:
        out = queue.pop(0)
        lit.append(out.val)
        if out.left:
            queue.append(out.left)
            nlast = out.left
        if out.right:
            queue.append(out.right)
            nlast = out.right
        if out == last:
            print " ".join(map(str, lit))
            lit = []
            last = nlast
    return

s = create_tree()
printQ(s)
printS(s)

結(jié)果

1 2 3 4 5 6 7 8
1
2 3
4 5 6
7 8
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溯乒,隨后出現(xiàn)的幾起案子夹厌,更是在濱河造成了極大的恐慌,老刑警劉巖裆悄,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矛纹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡光稼,警方通過(guò)查閱死者的電腦和手機(jī)或南,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)艾君,“玉大人采够,你說(shuō)我怎么就攤上這事”ⅲ” “怎么了蹬癌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)虹茶。 經(jīng)常有香客問(wèn)我逝薪,道長(zhǎng),這世上最難降的妖魔是什么蝴罪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任董济,我火速辦了婚禮,結(jié)果婚禮上洲炊,老公的妹妹穿的比我還像新娘感局。我一直安慰自己,他們只是感情好暂衡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布询微。 她就那樣靜靜地躺著,像睡著了一般狂巢。 火紅的嫁衣襯著肌膚如雪撑毛。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音藻雌,去河邊找鬼雌续。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胯杭,可吹牛的內(nèi)容都是我干的驯杜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼做个,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸽心!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起居暖,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤顽频,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后太闺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體糯景,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年省骂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟀淮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冀宴,死狀恐怖灭贷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情略贮,我是刑警寧澤甚疟,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站逃延,受9級(jí)特大地震影響览妖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揽祥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一讽膏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拄丰,春花似錦府树、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至载矿,卻和暖如春垄潮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工弯洗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旅急,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓牡整,卻偏偏與公主長(zhǎng)得像藐吮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子果正,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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