<prompt> Kwa kuzingatia safu mbili kamili agiza mapema na agiza ambapo agiza mapema ni upakuaji wa agizo la awali la mti wa mfumo wa jozi na inorder ni mpangilio wa mti mmoja, tengeneza na urudishe _mti wa binary_.Mfano wa 1:Ingizo: agizo la mapema 3,9,20,15,7, mpangilio 9,3,15,20,7Pato: 3,9,20,null,null,15,7Mfano wa 2:Ingizo: agizo la mapema -1, agizo -1Pato: -1Vikwazo: 1 kuagiza mapema. urefu 3000 inorder.length preorder.length -3000 agizo la awalii, agizoi 3000 kuagiza mapema na kuagiza inajumuisha thamani za kipekee. Kila thamani ya ili pia inaonekana katika agizo la awali. agizo la mapema imehakikishwa kuwa kipitisho cha awali cha mti. inorder ni imehakikishwa kuwa njia ya kupita ya mti.  <response>: chatudarasa TreeNode: def __init__binafsi, val0, leftNone, rightNone: self.val val self.left kushoto self.right hakidef build_treeagiza mapema, agizo: def construct_treein_left, in_right: nonlocal pre_idx ikiwa ndani_kushoto ndani_kulia: kurudi Hakuna mzizi_val agizo la mapemapre_idx mzizi TreeNoderoot_val idx katika_maproot_val pre_idx 1 root.left construct_treein_left, idx - 1 root.right construct_tree idx 1, ndani_kulia kurudi mizizi in_map val: idx ya idx, val in enumerateinorder pre_idx 0 return construct_tree0, leninorder - 1maelezoKanuni hutumia Utafutaji wa Kina-Kwanza DFS kwenye uagizaji wa mapema na matokeo ya upitishaji ya mpangilio. Algoriti hii mara kwa mara huvunja mlolongo wa mpangilio kuwa miti ndogo ya kushoto na kulia kwa kutumia safu ya kuagiza mapema. Wazo la msingi ni kwamba kipengele cha kwanza cha kuagiza mapema kitakuwa mzizi wa mti kila wakati. Kisha, tunaweza kupata faharasa ya nodi hiyo ya mzizi katika upitishaji wa mpangilio, na kuunda mti mdogo wa kushoto kutoka kwa vipengee hadi kushoto kwa faharasa, na mti mdogo wa kulia kutoka kwa vipengee hadi kulia kwa faharasa. Kisha tunaendelea mchakato huu kwa kurudia.Ili kuboresha utendaji wa utafutaji wa faharasa, tunaweza kutumia ramani katika C, Java na JavaScript au kamusi katika Python kuhifadhi fahirisi za vipengele vyote kwenye traversal inorder. Kwa njia hii, hatuhitaji kuvuka safu ya mpangilio kila wakati ili kupata faharasa ya kipengele cha sasa.Kwa kuwa tunafanya hivi kwa Python, Java, C na JavaScript, baadhi ya miundo ya data inaweza kuonekana tofauti kidogo na kuwa na utendaji tofauti wa kufanya kitendo sawa, lakini algoriti inayotumiwa katika lugha zote ni sawa.- Upitishaji wa agizo la mapema hutolewa kama safu katika utekelezaji wote.- Upitishaji wa mpangilio unatolewa kama safu katika utekelezaji wote.- Ramani hutumika kuhifadhi fahirisi za upitishaji wa mpangilio katika C, Java, na JavaScript, huku kamusi ikitumika katika Python.- Kitendaji cha msaidizi kinatumika kujenga mti kwa kujirudia.- Kwa Python na JavaScript, wigo wa pre_idx unafanywa kuwa sio wa ndani, kwa hivyo hauitaji hoja za ziada.Vitendaji vinavyotokana vinarudisha nodi ya mizizi ya mti wa binary uliojengwa upya. 