題目:輸入某二叉樹的前序遍歷和中序遍歷的結(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)。
特殊情況:
傳入的序列為空低飒,或者前序遍歷和中序遍歷序列不匹配等许昨,需要加以考慮
代碼如下: