劍指 Offer 07. 重建二叉樹(中等)

輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請(qǐng)構(gòu)建該二叉樹并返回其根節(jié)點(diǎn)记某。

假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的數(shù)字。

示例 1:

????輸入: 前序遍歷數(shù)組preorder = [3,9,20,15,7], ?中序遍歷數(shù)組inorder = [9,3,15,20,7]

????輸出: [3,9,20,null,null,15,7]


解題思路:前序遍歷數(shù)組=[根節(jié)點(diǎn),[左子樹],[右子樹]]碳默,中序遍歷數(shù)組=[[左子樹],根節(jié)點(diǎn)缘眶,[右子樹]]腻窒。

? ? ? ? ? ? ? ? 根節(jié)點(diǎn)root為前序數(shù)組的第一個(gè)節(jié)點(diǎn)值,找到這個(gè)root在中序數(shù)組中的位置磅崭,其中左邊為左子樹,右邊為右子樹瓦哎。

? ? ? ? ? ? ? ? 對(duì)此可使用遞歸操作砸喻,求得root的左右節(jié)點(diǎn)。

/**

?*?Definition?for?a?binary?tree?node.

?*?public?class?TreeNode?{

?*?????int?val;

?*?????TreeNode?left;

?*?????TreeNode?right;

?*?????TreeNode(int?x)?{?val?=?x;?}

?*?}

?*/


class?Solution?{

????public?TreeNode?buildTree(int[]?preorder,?int[]?inorder)?{

????????Map<Integer,?Integer>?hashTable?=?new?HashMap<Integer,?Integer>();//定義一個(gè)map存儲(chǔ)中序遍歷數(shù)組的值下標(biāo)蒋譬,key為值割岛,value為值對(duì)應(yīng)的下標(biāo),可快速定位到key值對(duì)應(yīng)的下標(biāo)犯助。

????????for(int?i=0;?i<inorder.length;?i++)?{

????????????hashTable.put(inorder[i],?i);//初始化 map

????????}

????????return?dfs(hashTable,?preorder,?inorder,?0,?preorder.length-1,?0,?inorder.length-1);

????}


????public?TreeNode?dfs(Map<Integer,?Integer>?hashTable,?int[]?preorder,?int[]?inorder,?int?preorderLeft,?int?preorderRight,?int?inorderLeft,?int?inorderRight)?{

? ? ? ? // preorderLeft表示前序數(shù)組的對(duì)應(yīng)的子數(shù)組的左下標(biāo)癣漆;

? ? ? ? // preorderRight 表示前序數(shù)組的對(duì)應(yīng)的子數(shù)組的右下標(biāo);

? ? ? ? // inorderLeft t表示中序數(shù)組的對(duì)應(yīng)的子數(shù)組的左下標(biāo)剂买;

? ? ? ? // inorderRight 表示中序數(shù)組的對(duì)應(yīng)的子數(shù)組的右下標(biāo)惠爽;


????????if(preorderLeft>preorderRight)?{

????????????return?null;

????????}

????????TreeNode?root?=?new?TreeNode(preorder[preorderLeft]); // 根節(jié)點(diǎn)root為前序數(shù)組的第一個(gè)節(jié)點(diǎn)值

????????int?rootIndex?=?hashTable.get(root.val); //?從map中找到這個(gè)root在中序數(shù)組中的位置

????????int?leftTreeSize?=?rootIndex?-?inorderLeft; // 左子樹長(zhǎng)度 = root 在中序數(shù)組中的位置-中序數(shù)組的首下標(biāo)

? ? ? ??

? ? ? ? //root的左節(jié)點(diǎn)=dfs(左子樹)

????????root.left?=?dfs(hashTable,?preorder,?inorder,?preorderLeft+1,?preorderLeft+leftTreeSize,?inorderLeft,?rootIndex-1);

? ?????? ?//root的左節(jié)點(diǎn)=dfs(右子樹)

????????root.right?=?dfs(hashTable,?preorder,?inorder,?preorderLeft+1+leftTreeSize,?preorderRight,?rootIndex+1,?inorderRight);

????????return?root;

????}

}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瞬哼,隨后出現(xiàn)的幾起案子婚肆,更是在濱河造成了極大的恐慌,老刑警劉巖坐慰,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件较性,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡结胀,警方通過(guò)查閱死者的電腦和手機(jī)赞咙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)糟港,“玉大人攀操,你說(shuō)我怎么就攤上這事〗崭В” “怎么了崔赌?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵意蛀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我健芭,道長(zhǎng)县钥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任慈迈,我火速辦了婚禮若贮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痒留。我一直安慰自己谴麦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布伸头。 她就那樣靜靜地躺著匾效,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恤磷。 梳的紋絲不亂的頭發(fā)上面哼,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音扫步,去河邊找鬼魔策。 笑死,一個(gè)胖子當(dāng)著我的面吹牛河胎,可吹牛的內(nèi)容都是我干的闯袒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼游岳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼政敢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起胚迫,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤堕仔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后晌区,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摩骨,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年朗若,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恼五。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哭懈,死狀恐怖灾馒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遣总,我是刑警寧澤睬罗,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布轨功,位于F島的核電站,受9級(jí)特大地震影響容达,放射性物質(zhì)發(fā)生泄漏古涧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一花盐、第九天 我趴在偏房一處隱蔽的房頂上張望羡滑。 院中可真熱鬧,春花似錦算芯、人聲如沸柒昏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)职祷。三九已至,卻和暖如春届囚,著一層夾襖步出監(jiān)牢的瞬間有梆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工奖亚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人析砸。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓昔字,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親首繁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子作郭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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