def get_leaves(pre_order, leaves):
8 T% Y9 r c2 D: I7 D( G if not pre_order:+ ~& n2 }% f! U" W* Z1 P, G5 `& P
return5 ?) \7 n! {; d
. p% p1 n' ?5 H' b
root = pre_order[0]
1 _. _ } r) C* {/ e/ ~: N% Y if len(pre_order) == 1:
* Q9 |6 `) f K& I8 H leaves.append(root)2 p( i- X6 {* M0 k
return ?5 Y& H8 }( e* Z+ J |
9 E; C- Z% m T left_start = None
# |2 l- p9 _6 `6 _1 E% e. f1 `: D left_end = None
' r9 ^! G) d! j1 {8 d right_start = None
: i2 \& j( O- W+ R7 k righ_end = None
0 M' F& ^, _' z( X for i in xrange(1, len(pre_order)):
, h0 y K% i. [1 `- l: o/ w8 l if not left_start and pre_order[i] <= root:/ v0 ]( j) R% d4 m
left_start = i
, N! Z6 K% s ]- b8 C w e9 _/ W( U7 P* Z% v/ k2 e
if not right_start and pre_order[i] > root:! U( U7 w% h- L7 f0 s% t
right_start = i
3 o/ \& _; Y7 Z" p( p 0 S/ h6 }1 _8 B; Z
if left_start:
9 W; A& V; X! G5 B+ b3 A& u* x( F if right_start: left_end = right_start+ }9 o" S* }% T
else: left_end = len(pre_order)6 F, p: J, W5 x" F7 a2 I
get_leaves(pre_order[left_start:left_end], leaves)5 Q& ^% f5 V" F% c) `3 w+ p
: h3 W4 {+ w, v8 h
if right_start:$ D. Y1 d- }- l0 m2 r
right_end = len(pre_order)
/ j4 f2 O$ j( @3 T' t0 Z2 t get_leaves(pre_order[right_start:right_end], leaves)( b- c! m2 F0 W0 R! c. u' z
. t/ c2 @0 I% S) ]a = [5, 3, 2, 1, 4, 7, 6, 8]2 ?+ |2 W) B) _6 |* H3 S
a_leaves =[]
" i0 G$ u- }% lget_leaves(a, a_leaves)5 ~$ C2 C2 N6 d3 C
print a_leaves
|