QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8038|回复: 5
打印 上一主题 下一主题

红黑树python实现~

[复制链接]
字体大小: 正常 放大
表咯痴        

19

主题

11

听众

63

积分

升级  61.05%

  • TA的每日心情
    慵懒
    2015-5-5 10:06
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    自我介绍
    我就是我
    跳转到指定楼层
    1#
    发表于 2015-4-15 09:44 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    #!/usr/bin/env python
    % W7 i3 ]) `7 c8 Q5 K# -*- coding : utf-8 -*-
    1 L# o0 e/ Y7 F1 m# k4 U5 s+ C! B8 [1 x
    import os
    . T# P& a  Q" D  Simport random
    ' T1 X; z1 ?/ u$ D2 `) b
    ( T2 G! J# F, G4 uRED = 0) A9 q0 K. _/ ~2 N# [; i
    BLACK = 1
    7 {, x2 t" Q0 t0 C" ^( j$ E5 G5 q" D
    class Vector(object):
      S+ G8 a+ U  Y$ |% k9 q    def __init__(self,x=None,y=None):
    0 x1 M- k0 Q, g4 {! ]        self.x=x4 P! m  L1 n1 v5 U1 f7 |  K! A8 t
            self.y=y; d( \# \& @: s# |& }& p0 P
    + g' g; z: I8 `" P) I. @0 B
    class Node(object):
    $ R6 C$ \$ \- d8 ~        """docstring for Node"""
    1 [9 J4 z3 k) y        def __init__(self,data=None,color=RED,left=None,right=None,parent=None):
    " b, e; _. O/ U8 P            self.data = data* q) Q0 m" y. g: H
                self.color = color
    % g0 W( P3 P- X" ^7 L            self.left = left+ n) B6 l7 w2 x: w4 N, \& u
                self.right = right
    ( s& U) P( O6 r' l* e" P            self.parent = parent
    ) U9 P# O- W6 |6 T0 j; E2 y6 _$ e0 s7 g& P  Z1 N% @
    class RBtree(object):
    + s9 y5 S9 Z* F1 L6 Q/ C    def __init__(self):2 p; D4 Z& I. t. {3 M* Q8 Z
            self.root=None. ], t/ p# }5 L/ i; u5 e+ g
            self.size=0. m! [" }+ L- V( O( r, l+ z) Z

    2 u  u* K0 |+ V. `/ M    def rb_rotate_left(self,node):
    $ I& q6 r2 l( K5 D0 h1 N6 n' W0 |* a        right=node.right
    4 Q. w2 S( U+ W' V6 T, y8 r- O! Q* p. x& ^
            node.right=right.left5 ]- T7 ]0 d& B
            if node.right is not None:$ {- x# Z: m1 n8 P" N+ e
                right.left.parent=node# T* z; C% m2 X7 W6 ~

    + M, b# P5 g: M3 R" S8 t        right.left=node1 Y2 u$ t- h  f) W# h
            right.parent=node.parent, ?! F8 U" x8 z" W' W7 |0 j

    : y& N1 ?5 j4 Q) ^% ^( h        if right.parent is None:( W* Q9 h6 P6 h  k; v3 E% Z
                   ) n7 m$ i: q/ W$ u8 p
                self.root=right
    " {: Y6 K2 h! H2 V7 }        else:
    9 ?2 p- M9 ?" y' f! `, e2 Q5 k            if node==node.parent.right:
    * b0 V4 p2 J8 K8 D: A# R2 O6 H                   node.parent.right=right
    ; K) v9 }( T# v- F            else:( x; |: p9 A( k$ n
                       node.parent.left=right
    ! ]7 N; n( }7 G+ m8 n. k        node.parent =right
    2 D4 r" U- \1 D$ F0 @, Y: f+ j9 h) N* a5 ]

    2 v) A6 n: b& e- y    def rb_rotate_right(self,node):
    / E# S$ c3 c/ i9 J4 d        left=node.left
      ^. a* S" c8 {3 Y# U        node.left=left.right
    ; d& c! _/ ~6 n0 ]6 i4 a9 \4 ?2 h5 t' ]1 N/ \* ~
            if node.left is not None:
    5 f# c/ [9 v; I: D, u" t7 E            left.right.parent=node) S1 V$ ?. c: G" D: e7 L& ~1 r

    & M) F! K9 @1 f) s: e8 M& X: Y        left.right=node
    ; u% V: T$ s$ E2 ~6 C  c        left.parent=node.parent
    8 ^0 q: a- C7 H" Z0 f1 r2 M3 ?4 m; r+ u" [3 |
            if left.parent is None:
    & r% |" Z6 v2 _5 r/ @            self.root=left# \) ?7 ]4 X8 ^; B2 @  J* \: |9 O
            else:
    5 E$ Z* @$ ^" {) b            if node==node.parent.right:9 n5 y% u  }' [9 z& `) }  G
                    node.parent.right=left  o: l4 [/ i. F% ]: S% {8 I
                else:3 z  I+ Q" F6 Q
                    node.parent.left=left
    0 Y( T- @- k- T0 V! S. I! x! l8 u        node.parent=left
    7 M1 v2 ]; _7 @7 L* a1 j/ O) {9 i, h% V3 K8 O& t: `3 j. N0 f; ^' C
        def rb_insert_rebalance(self,node):$ [: f6 X+ t; c) d
            parent=node.parent
    ) l/ y* {% R, h  Z* i+ Q, ]% G        while parent and parent.color==RED:8 s0 Q. z: F6 S4 O! _+ R
                gparent = parent.parent
    ' U" {9 U- T% @4 @3 F            if parent==gparent.left:
    % t/ j2 L& u0 q0 W; {, i                uncle=gparent.right9 B. Z  `$ a! X" S3 [3 P
                    if uncle and uncle.color==RED:9 w$ x; ]" L0 X9 G' a" b
                        uncle.color=BLACK1 l$ v. B/ Z3 j" W) S
                        parent.color=BLACK
    3 \6 f$ L  L* d; c- `0 D2 P                    gparent.color=RED8 U% a  Q% X6 D: X  S
                        node=gparent
    ' Y" @0 }; d8 b9 J% \! U                else:& t) C$ z' L+ ~! Y- d$ }+ |5 G
                        if parent.right==node:2 N9 G; t/ Y/ o$ K
                            self.rb_rotate_left(parent)
    7 g8 `4 e, k9 K1 a8 |/ L                        tmp=parent6 x) B( z. P& l
                            parent=node
      G  t& D+ O/ G                        node=tmp
    7 t; N( I1 A7 J9 x& x                    parent.color=BLACK
    1 E2 f$ o& C. D! m  ^% s                    gparent.color=RED
    * ?9 t1 b/ U; E  o
    3 a3 v% `5 Q. G6 @. G                    self.rb_rotate_right(gparent)
    * W7 M* t- [& M- Y) |# v% x: s$ R/ z2 ~5 f! m4 k9 H
                        if uncle:5 g7 ]" F1 Q. ~
                            if uncle.right:
    8 O/ ?4 m" |& ^+ B4 ?                            node=uncle.right
    1 [1 O4 e, E# z2 ?& y            else:2 h' y* o8 B  Z4 B! {" G" e  q
                    uncle=gparent.left0 x+ a. i  P: Z
                    if uncle and uncle.color==RED:2 K6 U3 V+ v, k. X
                        uncle.color=BLACK! {* N" o( G1 B) _" V& a+ U/ `/ @
                        parent.color=BLACK
    ) k0 a, p! u/ V/ ~  X8 T                    gparent.color=RED( P/ ?1 l7 L- X! p) e
                        node=gparent
    - U. x/ B, y' @6 ^1 X5 |: r: F                else:  K- `4 r9 ?; f
                        if parent.left==node:
    2 A5 l3 e. h8 Y$ V& P3 f+ G                        self.rb_rotate_right(parent)
    3 I! y" I7 C5 Y5 U+ U0 _7 n& d                        tmp=parent
    : [/ ]6 a3 m9 Y- P                        parent=node
    4 Q8 I  d4 l  v% Q3 ^$ @, g                        node=tmp" F0 c0 z( ]! H3 F' h
                        parent.color=BLACK
      \5 b5 ]+ B. j) _. k( r                    gparent.color=RED
    7 |$ \8 B, u, Y: w                    self.rb_rotate_left(gparent)
    0 i8 m( w& {( j' s" ~9 }; w" ~2 Z6 E' R0 ~" h# o' x
                        if uncle:0 c, _$ J! _- K7 r# v6 Z' \2 q
                            if uncle.left:
    , ]( V  U3 F* S' ]                            node=uncle.left
    8 m# E$ ~7 Y" w            parent=node.parent  y6 ^, r, U: M5 v8 w$ }) \. S
    7 s( V7 Q3 p, ~
    # x0 Q: x* a4 E6 S0 }, U
            self.root.color=BLACK
    ! }5 n$ K/ R4 V! @/ z  e* ?1 n        9 h2 e- Y  ?8 D* d# S( ]1 y
       
    , d% c, P1 @( v8 [- `( [    def rb_search_auxiliary(self,node):- s8 O) x3 b7 h! W4 [3 N
            tmp=self.root) n9 y! v/ k5 j2 m: u5 k0 X- b
            parent=None
    ( U9 U. L  v$ D2 |/ h5 S        while tmp is not None:
    5 L: W" w( H0 y$ S9 x1 Z- I            parent=tmp
    ' f6 C5 t3 l' \& h# F( ~            cmp=self.cmp(node,tmp)
    ( N, g  z% V; u0 a' S5 L            if cmp<0:2 |" ~, R3 E6 r) Q% q; g2 g
                    tmp=tmp.left
    * j7 ]# v4 ~- a2 X+ X            else:  Z6 W) K( Z; a# ^
                    if cmp>0:! K0 L1 [' p" M
                        tmp=tmp.right% E4 C- \+ _9 I
                    else:
    1 u# n. _# F6 ], t) r7 e- C7 i                    return tmp,parent
    2 |7 n7 [6 i* n. D! U) k/ }( U/ i+ `; e
            return None,parent, k. X( F' V2 i3 j9 \: r
    7 D' G3 e( Y9 R! [5 r' [
        def rb_insert(self,data):
    1 J6 h5 }2 d3 @# ~5 c5 q, F        tmp=None% ]% |3 N. T3 f( v' q2 t( _( q4 Q
            node=Node(data)
    ; B! s9 |9 [* h& d1 g        tmp,parent=self.rb_search_auxiliary(node). D0 n! O; Z1 y5 j/ o* [
    ) Q+ o- C4 @( Q( I# P" V
            if tmp is not None:7 z' O* E. h; t+ m- L/ D
                return # i# M8 w4 l/ y! l, s2 M% O
    6 s/ A$ W1 u% F
            node.parent =parent
    4 L5 T5 B8 X# A- W        node.left=node.right=None
    & }8 P4 @, n4 @! O% u6 _) I8 x4 F        node.color=RED
    $ r/ T( D* i3 C( p5 Q# z, g8 f
    6 f9 q( C2 p8 o9 p: [        if parent is not None:8 z: o+ c. y8 v! E) H
    * @" Z+ D& \3 `( l2 e& \  A, H
                if self.cmp(parent,node)>0:
    2 t* o. d' ^) w0 s                parent.left=node
    $ }5 _& M5 M/ f% V            else:
    , U  t2 s# I: z1 V  _                parent.right=node/ S2 ~, o4 |- l2 c0 Z+ C
            else:. Z3 Y4 b. \, p& o* A/ D: ]
                self.root=node* W1 `0 L# q, ]: z# w8 \8 `
            return self.rb_insert_rebalance(node)) Z+ e8 |, f+ n% T) _+ H
    9 f9 J! ]( P2 w8 j' A/ M
        def rb_erase_rebalance(self,node,parent):7 C4 `" \( v7 W
            while((node is None or node.color==BLACK)and node !=self.root):
    ; ?8 {; R6 r# J- |9 _0 h; e) y7 s            if parent.left==node:& q4 w+ Q1 s, X8 V
                    other=parent.right  n2 i' P6 \8 C% {
                    if other.color==RED:4 p, D( C8 H9 S7 A2 }; s
                        other.color=BALCK
    9 @) M. M9 l) z8 z+ X8 P                    parent.color=RED7 O& L: S1 E5 P
                        self.rb_rotate_left(parent); Z" r  e# g  d% l0 z4 S
                        other=parent.right
    1 [9 R3 G/ V1 t' F/ ?/ w8 w                if (other.left is None or other.left.color==BLACK) and (other.right is None or other.right.color ==BLACK):
    % A) g' V- K  X: j                    other.color=RED' H$ ?1 c4 L) u3 T
                        node=parent2 P* N" M  W* K/ H- t
                        parent=node.parent% n" i$ n- Z. H6 X. `  j" W3 G
                    else:
    : I7 X" Q* m, a% y                    if other.right is None or other.right.color==BLACK:
    0 U+ o4 |+ _  v' O6 h, }) }0 Q5 F6 T1 d
                            if other.left is not None:
    : \; g/ I5 S5 i                            other.left.color=BLACK. q3 S  C4 G$ d; H+ z7 J
                            other.color=RED
    : B; v2 `- A1 Q- n5 A# `: ?                        self.rb_rotate_right(other)2 B/ e; l6 l; O, p) L# v- l; L
                            other=parent.right
    1 t' G9 w$ g% y' F1 o6 b( z) u+ o9 |. C# S6 w  X6 T; g
                        other.color=parent.color
    ! v$ @6 F5 R! [. o                    parent.color=BLACK4 |" j$ x9 {* I2 O3 E, o6 N
                        if other.right is not None:
    / `9 C% C+ I! U: C                        other.right.color=BLACK
    7 @5 u, o/ j5 T" q* k7 a! |                    self.rb_rotate_left(parent)5 S% u* C4 p/ u0 \3 y: U5 h7 o' ]
                        node=self.root
    - A1 U9 g* Q+ v7 r. v. N0 f# T) r                    break4 y. ]5 H/ w: }' Y% ~$ `
                else:
    1 @' W  W( Y2 h1 b5 ~( r; T! C                other=parent.left
    ; [1 M. [% ]* H9 |8 M                if other.color==RED:+ ]6 G; ~9 x% G1 Z# i
                        other.color=BLACK
    % j4 [. b( W9 ]; S% `                    parent.color=RED
    * d' W0 q8 a  X( f; @: @                    self.rb_rotate_right(parent)% K% j7 S$ ], {# L
                        other=parent.left
    , e3 }7 u) P) u* i                if (other.left is None or other.left.color==BLACK) and (other.right is None or other.right.color==BLACK):# J7 s  g9 j0 k0 m; ^
                        other.color=RED+ Q" y5 S6 n; w5 G3 k
                        node=parent  H5 @  n# _( Q6 u
                        parent=node.parent! H- N9 }8 E% H$ `" t6 a
                    else:) ^, x1 {3 k( k) Y" c1 I. E
                        if other.left is None or other.left.color==BLACK:: L, {9 m( F$ y
                            if other.right is not None:
    2 S: d: E' H3 C$ z/ ]  [4 s                            other.right.color=BLACK- |1 ~/ w% U2 V* h% I( v

    & n. ?% X2 A4 H( H1 R( R                        other.color=RED% d4 o: a- g& i  E
                            self.rb_rotate_left(other)
    " g, {+ P% X0 E1 |& z7 t                        other=parent.left/ w# d, f5 o: c$ Z) T
    7 ^2 `! r# b4 R& M
                        other.color=parent.color2 K# y/ A4 \+ j5 G- o1 o, A, c, d8 u
                        parent.color=BLACK; G, `4 S  H5 j: o& s7 J

    7 m; B: t; t4 ^# |1 k( v& x                    if other.left is not None:
    ) E) N+ ]/ k9 l, C                        other.left.color=BLACK1 R! D! }% q: D" }. [- t; T' U8 p
    2 d) r$ `- C! i# T$ t- H$ w
                        self.rb_rotate_right(parent)
    5 @7 n( m) ^1 W2 [3 t                    node=self.root
    % k' o) Q: W$ c5 _7 E5 U                    break
    - B, O" i! y5 ^0 A1 n
    3 A) t3 D# m) E% T' P
    4 Q% T& i) ~: R! |2 |. s& @
    8 Z% }- w3 Z2 d* X/ D        if node is not None:9 A  P, h' [" a6 K" _9 ~9 Y: w% R
                node.color=BLACK    4 Y; K* x; p8 H) `9 s0 N
    & y& s8 Z  P. N& O
        def rb_erase(self,data):4 G3 ^) F% h; [% C0 ]) Q: R
            tmp_node=Node(data)
    + \" Y% q9 P! z1 C5 \5 P        node,parent = self.rb_search_auxiliary(tmp_node)1 x9 i8 U6 Z: ?0 G) \
            if node is None:
    2 y: |  f+ }$ V' W/ x2 e& n  N            print "data is not exist."
    % w9 B# W# `& {$ D  F            return
    . k2 ~( m5 Y, b          ~& ~6 a0 n6 ?) a" y
            old =node
    7 z  C5 l0 q. q" ~2 V        if node.left and node.right:
    2 v) W% ~# ^7 p/ d            node=node.right
    % |% c& R8 @4 T2 }" I8 S! u! a3 W$ S* [  T9 e' b
                left=node.left/ V! M, v+ `9 F3 l% i8 [0 k
                while left is not None:
    " L4 M( b# i2 ~: v% s  Z                node =left7 @/ d1 O1 P( y/ t6 K/ i9 ?
                    left=node.left& j+ q0 N+ ]& K. |& \
    & F' P8 y% Z- `
                child=node.right
    ) B7 ~4 n/ r& k- z1 Q% r            parent=node.parent' R+ i' t' o( M4 B: D% L) g
                color=node.color/ p- Z/ i$ }, a# w& r2 a  H
    1 f# E8 v5 D$ S' M1 K8 p
                if child:0 ~8 S3 E7 ~0 b0 V: X+ O
                    child.parent=parent
    ( b* z2 G: M3 A' [. O5 O. E1 d7 i            if parent:
    ! `' Q5 p, w$ T- R2 W3 t                if parent.left==node:
    * t9 k7 y% _! q! @1 k" m# d                    parent.left=child2 Y+ j& {. \) ~" ~: G: u
                    else:6 G4 b0 X5 R8 D+ P6 C4 ^+ P
                        parent.right=child& s6 h7 Q+ c. ~
    ( V2 y, e/ a% O8 [; R/ a
                else:+ `0 y8 j9 K* T! V
                    self.root=child
    : u8 n! P# m* i2 e6 s
    " L6 c4 u. M' B. Y- ~. F' e/ e1 z            if node.parent==old:4 \/ A: ~4 y$ w! D  j
                    parent=node: U2 T' Y! M$ ]+ k* Y# T
                node.parent=old.parent! B/ }- c' B1 }, c/ w
                node.color=old.color
    9 T! c2 u& L, G. G            node.right=old.right6 h( w% n4 M) a) _+ c
                node.left=old.left
      Q" L6 m2 W: H! h$ X- X4 L' P5 R& p5 f6 s2 l8 S3 X
                if old.parent:0 ~- P$ J0 E, q7 y
                    if old.parent.left==old:: ?* i7 R# y( C* Q$ P) r
                         old.parent.left=node
    / G8 t( p$ C6 [                else:( \" I! m" E1 P( w& {2 n. {
                         old.parent.right=node
    ' i) g$ s% u* p9 j1 @7 S7 F' R1 w. z            else:
    " n- k& f9 d: M0 m$ L                self.root=node6 b% c1 c" R. F0 Q3 a6 w
    # f; g( W! _9 {" k1 @
                old.left.parent=node
    * v* `3 S/ G, u            if old.right:/ D6 @4 F; F; r! k9 C% t9 e
                    old.right.parent=node) j! a$ O/ G7 Z

    2 ^$ F# x& L" N3 |7 g; I" }, F" c        else:
    + @6 f% x% Q7 ~" u+ q            if node.left is None:( @9 G4 ^6 k# B
                    child =node.right
    " W1 d. E  L: J9 l' n$ U: _            else:
    " L7 F3 Q: [) Y9 E9 V( o                if node.left is not None:
    % w% J' D7 @; `$ p) d) Y( r0 I                    child=node.left7 ~; i) G& i7 G9 E3 H! v/ E
                    else:. f9 W" I6 \7 q8 ~7 k
                        child=None2 c' a) `9 E1 n3 P+ _
                parent=node.parent
    " J6 k) X0 D, J. i( K            color=node.color
    ! Z' q# j: `, l' j6 e$ Y            if child:( N' k0 G, f6 _
                    child.parent=parent
    * l) ?8 g6 j- O" p- e            if parent:
    ( @9 f+ D8 U" E, }0 S                if parent.left==node:
    9 o* J2 G: f  R5 D                    parent.left=child$ y; y  X7 y& E) U* ~5 ~
                    else:
    & H8 G" ]* }! g, b- R                    parent.right=child- Y* z+ m1 u# a; L' ^: l, b
                else:; k1 N& F# W4 T8 h) R* l( C
                    self.root=child9 Z" f& N. {- I6 Q% h
    % R' s' R# C7 A5 c/ g( L: c
            if color==BLACK:) X: f0 m, |6 M( S( n/ X2 J

    " G' h! Z. \* X, {* q            self.rb_erase_rebalance(child,parent)
    / T9 `# Z6 ?. W" n/ j& `7 e6 m/ l* A3 H% P5 }) z# |
      b* A+ j% W4 P' d9 P
        def rb_travelse(self,node):7 b8 i' ~- M3 I  v/ j
             if node is not None:
    ; g) R9 x5 p& n" N3 n& c             print str(node.data)+'\t'+str(node.color)" A, Q7 |- F. y$ i
                 self.rb_travelse(node.left). T/ b9 E- E8 N$ F; j
                 if node.parent:
    ! b' r0 Z! R1 j. M5 ]6 G* n; u                 if node.parent.color==0 and node.color==0:0 X. b) u1 M8 \9 C+ s
                         print "error"+ M9 V$ h! F0 q. J5 P. l0 |5 Y% a
                         return
    & U/ w% v4 J. u: M# o( k% P             self.rb_travelse(node.right); R4 N# A" S, y5 W0 A8 @
                 if node.parent:
    7 r& p1 C/ y, z) v                 if node.parent.color==0 and node.color==0:4 h% ^  E2 F  z3 |1 K; r
                         print "error"
    2 N3 o- V% {* G( `; p, m                     return! ~" ]) R  N" \$ X) B1 H
    - l) Q* H1 o% n9 P6 C
             return
    5 A7 u3 t) V. l& F8 z2 n               
      n$ W% g7 k! s8 C+ W4 i     - x% n. v. |2 Y1 ]5 t
        def cmp(self,node1,node2):
    / N" _1 t+ b# m3 z+ m        if node1.data>node2.data :
    4 g$ M8 B4 P2 x4 F            return 1
    4 b$ B- g% a; u$ ^        if node1.data==node2.data :9 i; j5 @! P: o! A  T+ u
                return 0
    $ ^% `9 e$ x. u* o: s7 J        if node1.data<node2.data:& T7 I7 W  V2 q# ?0 `: N2 g. V
                return -1# ~" P- [/ q, t& q6 s1 v
    $ P& Y" b4 C9 ]: m7 }/ l
    if __name__=="__main__":/ C! ^( c! ?( T% T, ^% D
        print "main"
    ' d, [6 f5 G# U' U# h2 M# L    data=[28,6,39,78,6,43,61,56,71,38]
    ( U% a- ~2 {, I& n- }9 ]! v    #for i in range(10):2 v) Y+ n$ m( U9 ~
        #    rand_num = random.randint(0, 100)4 j7 e1 V1 W+ g4 B
        #    data.append(rand_num). u$ k& Q" U9 S7 {! a& F
        #print data
    3 N' l: ^+ g# }8 v0 y# N1 l5 n    t=RBtree()
    " D8 Y0 i4 D$ }% v0 t3 b0 v. x/ L/ L8 o
    8 x: i1 W' o! T2 Q, F
        for i in range(10):
    % F. o: d/ S& G+ u8 [        t.rb_insert(data[i])
    . p( V, l' |' S) s. L2 G
    , N0 Z7 `2 Z, Z0 v! `2 D  e/ G; k: A4 k0 a8 E9 V# `1 `! y- F6 E8 [
        t.rb_travelse(t.root)8 E; _2 Z1 r* O+ m+ w/ {, `

    5 m, \  o4 h6 \* u    print "---------------------------------"
    : W* k$ m! L% X% s! b( Q8 V    t.rb_erase(data[7]); {% k2 ^2 k/ o
            ) ?5 t( `2 y0 }7 f$ F
        t.rb_travelse(t.root)  a( {, z6 i% U) h8 P; u; o) h
    ! D2 _" f* z. Y! M* c3 D
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    21

    主题

    12

    听众

    237

    积分

    升级  68.5%

  • TA的每日心情

    2016-12-27 16:41
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    回复

    使用道具 举报

    21

    主题

    12

    听众

    237

    积分

    升级  68.5%

  • TA的每日心情

    2016-12-27 16:41
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    回复

    使用道具 举报

    21

    主题

    12

    听众

    237

    积分

    升级  68.5%

  • TA的每日心情

    2016-12-27 16:41
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    回复

    使用道具 举报

    21

    主题

    12

    听众

    237

    积分

    升级  68.5%

  • TA的每日心情

    2016-12-27 16:41
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    回复

    使用道具 举报

    21

    主题

    12

    听众

    237

    积分

    升级  68.5%

  • TA的每日心情

    2016-12-27 16:41
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-12-6 11:29 , Processed in 2.401162 second(s), 79 queries .

    回顶部