LeetCode_105_從前序與中序遍歷序列構(gòu)造二叉樹_hn

題目描述

根據(jù)一棵樹的前序遍歷與中序遍歷構(gòu)造二叉樹。

注意:
你可以假設(shè)樹中沒有重復(fù)的元素。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]

返回如下的二叉樹:

    3
   / \
  9  20
    /  \
   15   7

解答方法

方法一:遞歸

思路

先來了解一下前序遍歷和中序遍歷是什么。

前序遍歷:遍歷順序?yàn)?父節(jié)點(diǎn) -> 左子節(jié)點(diǎn) -> 右子節(jié)點(diǎn)
后續(xù)遍歷:遍歷順序?yàn)?左子節(jié)點(diǎn) -> 父節(jié)點(diǎn) -> 右子節(jié)點(diǎn)
我們可以發(fā)現(xiàn):前序遍歷的第一個(gè)元素為根節(jié)點(diǎn),而在后序遍歷中,該根節(jié)點(diǎn)所在位置的左側(cè)為左子樹,右側(cè)為右子樹。

例如在例題中:

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

preorder 的第一個(gè)元素 3 是整棵樹的根節(jié)點(diǎn)。inorder 中 3 的左側(cè) [9] 是樹的左子樹,右側(cè) [15, 20, 7] 構(gòu)成了樹的右子樹。

所以構(gòu)建二叉樹的問題本質(zhì)上就是:

1、找到各個(gè)子樹的根節(jié)點(diǎn) root
2、構(gòu)建該根節(jié)點(diǎn)的左子樹
3、構(gòu)建該根節(jié)點(diǎn)的右子樹

代碼

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        if len(preorder) == 0:
            return None
# 前序遍歷第一個(gè)值為根節(jié)點(diǎn)
        root = TreeNode(preorder[0])
# 因?yàn)闆]有重復(fù)元素,所以可以直接根據(jù)值來查找根節(jié)點(diǎn)在中序遍歷中的位置
        i = inorder.index(preorder[0])
# 構(gòu)建左子樹
        root.left = self.buildTree(preorder[1:i+1], inorder[:i])
# 構(gòu)建右子樹
        root.right = self.buildTree(preorder[i+1:], inorder[i+1:])
        return root

時(shí)間復(fù)雜度

空間復(fù)雜度

提交結(jié)果

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 題目#105.從前序與中序遍歷序列構(gòu)造二叉樹 根據(jù)一棵樹的前序遍歷與中序遍歷構(gòu)造二叉樹。 注意:你可以假設(shè)樹中沒有...
    qiHuang112閱讀 404評(píng)論 0 0
  • 前言 二叉樹遍歷是非常經(jīng)典的算法題,也是二叉樹的一道基礎(chǔ)算法題。 但是在平常的筆試面試中,其出現(xiàn)的頻率其實(shí)并不是特...
    蠻三刀醬閱讀 1,451評(píng)論 0 0
  • 樹形結(jié)構(gòu) 在前面章節(jié)中介紹到的數(shù)據(jù)結(jié)構(gòu),都為線性結(jié)構(gòu),比如鏈表,數(shù)組,隊(duì)列等,都屬于線性結(jié)構(gòu),類似于通過一根線串在...
    ducktobey閱讀 1,408評(píng)論 0 0
  • 今天看了篇文章,里面說關(guān)于所有女生最在乎最關(guān)心的年齡,怕老,徐靜蕾曾說:“除非你覺得美和年輕是你最大的優(yōu)點(diǎn),要...
    D009十字閱讀 259評(píng)論 0 0
  • 下班到家,姥姥正在做飯,你和弟弟坐在地板上正在專注的拼科學(xué)現(xiàn)場,互助互愛。 晚飯后你把碗洗了,雖然手受了一點(diǎn)小傷,...
    可愛的寶閱讀 240評(píng)論 1 4

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