题目描述:根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 i c } m l p a o s r s f } f } f } t u / u / u F n 不 n 能 n F o c 能 c 改 c o r v v r v l v w } f } r 改 i } l p f } r 变 i } l p f } r u 0 r a a e / a a e a / a h o e 变 r f e r o e 输 r f e r o e n 6 e r r t 下 r r t r 左 r i r t 输 e t i r t 入 e t i r t d S b u 面 子 l u 入 c s n u c p n u a o u p i r 是 r t r r 树 l e l ( v i } } } r u t r r t i i } r u r r r t i i } r t l i n 循 o r e i 长 e e i a f e e n r a e o ( n f n r e e o ( n f n i u l = = 环 o e s g 度 f i f r l l s r t o r d s O t o r d o t d r t e h t n t , i s s r i t u t o e i r i r u t o e i r n i T p i e V = t L O L f c e f w } e f l i } w } e v P r o x n r r b o v d r o x n p r r b o o r r n c a = T e r e n i = o i h i e f h s e r n = t O o o r o e e n = t O r o o r o n e e O u l t r n d n ) n = n i n i { n t i 1 e . i r o o e t 2 r . i r i o o e t e O r r u T r e e d t f d l d f l ( n T v n d t t a ( . n T v n d n t t a { 1 r d s e r e e = r + i I 0 i I e i } } f I r i r e i } } f _ > i r a e . . k _ c i r a e t . . k ( d e i e e [ = n n n i n / f e i n i n / o f e i l e l s r l r o l e l s r ( l r _ e r v = e = 0 l d { u d f 从 l n d g d 右 o f l n p e e ) t [ e i p u e ) t [ " e i r e N e 1 p e e < e i 左 i s d e h I 子 t i i s d r n N a i f g r n N a i \ f g p 2 p o t f r x = x n 向 n t t r b e t t r b I x t n 树 V n n r r r b e r r r b I e d o r n t h e t o r n ( t h r ( r d r t e d 右 O r r o r r r o r n L d 的 a d O i i o r i i o r n O P d t d t O d t d s t e & e e e L O = l = I 查 r e e o e i e e o e d = e e 第 l I r g g o e i g g o e d r r e I e = r = e I e t = O p O ( e e r e n 找 d e e t a f e e t a e n x 一 u n d h h t a f h h t a e d e ( n x = d = ( n x a = r , r r n d 0 f 0 d , e . V k . V k x l 个 e d e t t V k t t V k x e p . ] r e p . ] r r d d o ] e t e 先 r r = a i l = a e = = 节 e r T T a i T T a r r . e r r 0 r . t e r e & e o r L x 找 [ i l n e l + f = 点 = x [ r r l n r r l + : e . = c e : e . = I c e r i r t ! . e 到 f g t u O f t u = t p f e e u O e e u = O e = u c O e = n u c : , [ V = e n < 根 i h r e r t r e L r i n < i e e e r e e e i s r n r u i r n ) r u 0 a n = 节 n t e d e 1 e e = n . d . 1 n t d d r s r n d d r + s r [ 0 ] l r u { 点 d e = e = e = n O { d r = = e l = = o a e I o i s o s e I o + i s I , u o m l , I = . r . r r I i r e u r r n o v i u t r n + v i n e o e e 说 n r n [ T l n + d i n g r n [ f r n t t [ t e v t a . t e v t i ) t r f 明 d T i f r e e g d h i f t i I s { . 1 e r r { . ( 2 e ] . V a t n e r g i e f 1 r h e t g i g [ n t v ( 1 [ t e v i ( 2 , c a t L 在 x e h n e t . t x h n = h I a a & ( I I m a n & ( o l e e 右 ] e t d N ! c L ] = t d t n > r l p & n n o l d p & _ u u d n 子 N ! I o o e T I T T t t r p t v e r p n e ( 树 = o n d u n = T r n r r ] e P { e r ] > e { x e r i t ) { 上 = d d e n = r e d e e , n r O e , F ) O e n - { e e ( t { e e e e e _ d e r O e i + r O O 1 { r ( x n r e . x N . I ] d r _ n r + d r r ) o n ] ) - o N r ] o l s n ) e d d s + e d d o ) o o i d e t r e i I t \ r e e t = 1 t d g = e f a , r n n ( ( , r r V = V e h = ( t r { , O ) e , : a a ( t n ! t s r ) n & l n l n ! n ) P t s d { d i & [ u u ) r a t e I n i I e { e { e r a r n O n n : t r : ) r O t { { P t " d r ] I r P i ) e d n e r n r e ) t + e o , r , 1 + u , _ , ( t s i t i e s n [ a n T n t d I r d r d a e n t e e P r x t I x e r t - ] n + N e P s , , 1 o : r t _ , d e a i e I + r s n e ? n ( t t d n t i I a e d { , n n r x I d ) t - n _ e + I 1 ) x 1 n ) i - , : n s O t e I r a n n d r d t e t P , r I r _ : n e ) , e i , n n & d o & i I u i n n t n O : O r [ r d I I d e n n e r t t r , ) ] , , i _ s n t d s a e T t r x r a t + e r I 1 e t n , N I , o n e d : i n e n d ? I d I n e n { t x ) , - _ 1 ) e n d I n : I n t ) T r e e N o d e ? { 算法思想:前序遍历的第一个值为根节点的值,使用这个值将中序遍历结果分成两部分,左部分为树的左子树中序遍历结果,右部分为树的右子树中序遍历的结果。然后分别对左右子树递归地求解。 github地址:https://github.com/cubegao/LeetCode