java實(shí)現(xiàn)-劍指offer-面試題6:重建二叉樹

題目:輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請(qǐng)重建出該二叉樹。假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的數(shù)字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷虛列{4,7,2,1,5,3,8,6},則重建出如下圖二叉樹并輸出它的頭結(jié)點(diǎn)。

二叉樹結(jié)點(diǎn)定義為:

思路:

本題的考點(diǎn)是樹的前序遍歷和中序遍歷,以及用遞歸方法來構(gòu)建樹。

通過畫圖觀察可知,對(duì)于每一個(gè)樹(子樹),給出前序遍歷和中序遍歷序列,前序遍歷的第一個(gè)值就是樹的根結(jié)點(diǎn),題干里又說,不含有重復(fù)數(shù)字,因此通過確定根結(jié)點(diǎn)在中序遍歷序列里的位置,即可得知左子樹和右子樹結(jié)點(diǎn)序列。中序遍歷序列根結(jié)點(diǎn)左側(cè)的結(jié)點(diǎn)屬于它的左子樹,右側(cè)的結(jié)點(diǎn)屬于右子樹。對(duì)于每一個(gè)子樹,傳遞其前序遍歷序列和中序遍歷序列,就可以用同樣的方法確定左右結(jié)點(diǎn)。

因此,可以遞歸調(diào)用樹的結(jié)點(diǎn)構(gòu)造方法,方法參數(shù)為前序遍歷序列、中序遍歷序列、前序遍歷中(子)樹的開始位置和結(jié)束位置,中序遍歷中(子)樹的開始位置和結(jié)束位置。

終止條件:

當(dāng)傳遞的序列只有一個(gè)值,則可以確定該結(jié)點(diǎn)為葉子結(jié)點(diǎn),不再含有子結(jié)點(diǎn)。

特殊情況:

傳入的序列為空,或者前序遍歷和中序遍歷序列不匹配等,需要加以考慮

代碼如下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)據(jù)結(jié)構(gòu)和算法--二叉樹的實(shí)現(xiàn) 幾種二叉樹 1、二叉樹 和普通的樹相比,二叉樹有如下特點(diǎn): 每個(gè)結(jié)點(diǎn)最多只有兩棵子...
    sunhaiyu閱讀 6,701評(píng)論 0 14
  • 樹和二叉樹 1、樹的定義 樹(Tree)是由一個(gè) 或 多個(gè)結(jié)點(diǎn) 組成的有限集合T,且滿足: ①有且僅有一個(gè)稱為根的...
    利伊奧克兒閱讀 1,564評(píng)論 0 1
  • 四、樹與二叉樹 1. 二叉樹的順序存儲(chǔ)結(jié)構(gòu) 二叉樹的順序存儲(chǔ)就是用數(shù)組存儲(chǔ)二叉樹。二叉樹的每個(gè)結(jié)點(diǎn)在順序存儲(chǔ)中都有...
    MinoyJet閱讀 1,735評(píng)論 0 7
  • 1.樹(Tree): 樹是 n(n>=0) 個(gè)結(jié)點(diǎn)的有限集。當(dāng) n=0 時(shí)稱為空樹。在任意一顆非空樹中:有且僅有一...
    ql2012jz閱讀 1,191評(píng)論 0 3
  • 這幾天開學(xué),學(xué)校還在上課,最近也是在找工作,很多天都沒有更新文章,現(xiàn)在補(bǔ)一篇二叉樹的文章。 最近校招公司的筆試陸續(xù)...
    zero_sr閱讀 4,105評(píng)論 0 5

友情鏈接更多精彩內(nèi)容