QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8431|回复: 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
    2 o" F* s1 ^; M% v' Z# -*- coding : utf-8 -*-
    $ [' `4 T/ q* L# A! k% A
    + K. A% p7 P( C3 k- V# {import os  y9 T4 m( z5 v4 j* e0 t
    import random+ i% D6 `" }' e
    : q* N& r2 c2 s8 u
    RED = 0; l6 u& a2 A! w' o( u2 j
    BLACK = 1
    . Y/ v) C; `1 w# K5 L( Z3 R/ W: c3 x9 \& A" m5 R/ @; g8 Y5 t( D0 }6 \  _
    class Vector(object):
    : d$ D" `) x1 g5 F' w7 n) p    def __init__(self,x=None,y=None):8 ~* q" K2 v; l4 }; M2 y, E
            self.x=x
    ! A- x% K8 n# E! W7 K: `& U        self.y=y
    / Z. Y; A5 ~3 [7 u4 B" Q
    7 m5 m9 P1 C% }9 h, f. Lclass Node(object):
    1 U' o- b) s0 R+ G4 ~$ V, h8 U        """docstring for Node"""- }& l; Y" l) ^% Z- c% b
            def __init__(self,data=None,color=RED,left=None,right=None,parent=None):9 V: u3 q$ p( X+ G7 p1 r' s
                self.data = data
    ( h1 y: \0 b2 C0 D4 M            self.color = color7 @3 q. I# G1 x: c4 v: X
                self.left = left
    , D: x" V7 k3 g% S7 C/ G8 N            self.right = right
    ! }1 ?) R: X" c$ \; h; B4 b            self.parent = parent7 j7 M' {9 c0 X

    ( N9 w- ~3 i% q7 Rclass RBtree(object):9 A+ T) g- J* `% d( m2 Y% H) K
        def __init__(self):
    6 ?% }# j  @" ?) B& k        self.root=None
    2 F# H1 g: o9 A1 ~0 L        self.size=0
    8 E1 Z! B6 k* o' ^; i% i- I8 P) U; X# Y1 w$ f& U
        def rb_rotate_left(self,node):: d" ~: @$ a/ `4 ?) B" b
            right=node.right
    ' i4 p( J& z% V7 O
    # @8 c$ Z! K  |# I# V/ O5 M2 Q        node.right=right.left0 ]: {5 O4 `9 I
            if node.right is not None:
    % q0 A" H1 }3 n' z! a+ Q" c) q/ E            right.left.parent=node; Y; r, f) t/ y

      e2 w, i' q& b. d4 h& j        right.left=node  h4 u. V5 ?" {1 W7 J+ ~
            right.parent=node.parent9 T+ O" a* v/ u  `* k2 J' y

    $ r) l0 c. b: T, s1 K8 N        if right.parent is None:
    ! i! V0 g7 x  T5 h               - Y) a# Q" C" E) Y
                self.root=right, F: R- {. _9 D* ?2 D
            else:' z& u4 V9 J- N. k2 F7 I! s
                if node==node.parent.right:
    " A6 B$ C7 X' Q6 l/ p! ^                   node.parent.right=right
    $ E8 D: x5 n, o: R            else:
    2 v& {1 U5 I; z( L' Z8 M8 k, V/ [                   node.parent.left=right
    5 z/ J' m" H! X. B+ G        node.parent =right
    1 V7 e3 w. M( D1 }$ \6 I7 T' L4 ~0 r, F( z3 m/ P# c% g/ P

    ) y8 s: @2 ^0 o    def rb_rotate_right(self,node):+ W7 O3 u+ v+ B% T" y
            left=node.left6 L/ i% B. B" @
            node.left=left.right
    8 U* L1 z/ o3 L/ S& e: |2 @0 K4 B: V6 W* G3 _
            if node.left is not None:. z: ]6 [8 g# m5 n8 M
                left.right.parent=node
    7 |" s: z" p* B& m* d) m+ a8 n$ z8 o+ {2 w: x  I
            left.right=node  n5 [7 R" q8 q5 H! e5 [7 K
            left.parent=node.parent
    : Q1 c9 w) z3 x2 v1 w) T
    / W! W! S6 _* d        if left.parent is None:
    9 W3 p, i: D" C% O            self.root=left" B7 b6 x9 ]' O1 f. f- m* ]& o
            else:7 K* ?/ m/ c3 T
                if node==node.parent.right:. z$ G( {- u: {4 w
                    node.parent.right=left
    , T, s7 X/ D  B) ]% ~            else:
    ' h8 o0 ?6 J/ W4 ~                node.parent.left=left4 P, ]6 T- @6 u3 M- f5 m  W' w7 F$ U; N
            node.parent=left
    + d0 U4 x6 k! O# P5 P4 j* G
    ) @/ w; ?( \# k    def rb_insert_rebalance(self,node):4 }6 y% [+ b0 I0 z2 M! a
            parent=node.parent$ z/ b9 H: X1 i0 v8 R4 H. K
            while parent and parent.color==RED:
    " |& e; u" G  s            gparent = parent.parent
    5 e, V3 O3 P) o( ~0 A            if parent==gparent.left:
    / ^( k1 W9 \! C- d2 t* X                uncle=gparent.right
    ( }: Z2 i6 N# g' E- N/ ?                if uncle and uncle.color==RED:1 L( u. A3 c$ {: F" W1 ~
                        uncle.color=BLACK6 F; l  P! n5 t1 W& H
                        parent.color=BLACK( P. q  K  h+ c0 E
                        gparent.color=RED
    6 x0 l3 Q' F" h0 ~                    node=gparent
    5 f3 S; I8 F, [5 ^& u8 [- `1 P5 a7 H                else:
      }1 @3 {2 S# v! k. i8 k, t                    if parent.right==node:
    6 }; O, O  R$ A2 e7 J4 \) ?                        self.rb_rotate_left(parent)
      k/ k  o# e$ X4 \9 t; M                        tmp=parent1 _1 a. ^/ {+ M2 j9 U
                            parent=node
    3 M! |0 n" D& T' j/ N7 @6 C0 T0 C                        node=tmp
    + L1 R( t! H4 l8 ?3 ]                    parent.color=BLACK- A, a- Y0 G8 R7 E
                        gparent.color=RED
    # y; c) s9 `+ B
    $ B& k; x& k4 G                    self.rb_rotate_right(gparent)
    " c, F: ~' x$ d, a* X
    1 v4 ~; I, h7 m- L7 u/ C6 q                    if uncle:
    ) E* Y5 j+ q/ j# R5 c                        if uncle.right:
    5 @% P5 _2 b/ `/ A                            node=uncle.right0 K0 V( U% l% d! @. J. N: Z
                else:
    * a9 a  N: T! Q  y, A: }/ r+ U( D                uncle=gparent.left4 X" N% H$ k# P  {
                    if uncle and uncle.color==RED:
    8 V6 K' h% @! d4 w                    uncle.color=BLACK5 B6 \3 X( u! f% c) \
                        parent.color=BLACK* g* R2 T7 k0 K' |
                        gparent.color=RED& E% E8 o) E' l7 e$ g
                        node=gparent
    ; ~. W' `  W& E, w. U/ ~                else:4 L6 @7 _6 w6 u9 g& H. I
                        if parent.left==node:* Z9 K+ h. T; @" N2 y
                            self.rb_rotate_right(parent)
    9 o" l$ b8 I+ X& ?; @  c                        tmp=parent
    ( V2 q# Q0 L. {6 c" V( I; G                        parent=node
    4 N2 E( I5 {1 w! L                        node=tmp
    1 t! j- Q" ^* Y$ Q! F% D                    parent.color=BLACK
    3 c2 x- w5 i5 t$ t! U' {5 U                    gparent.color=RED3 J8 V: l" c2 \) q# C
                        self.rb_rotate_left(gparent)" y1 |3 _0 G& b, {' v+ P

    - V  G/ ?, W: R2 L; I4 L+ |" S                    if uncle:
    " g- E/ H7 Q! t                        if uncle.left:
    & a- O% T2 ]4 I4 d% p+ W) U: Z                            node=uncle.left
    + |/ b! ~8 Z4 b6 l) p            parent=node.parent8 X0 \- P+ ^4 M- F& K! l' U

    , f) _: U6 Y' B, t1 p
    # p6 L4 [8 F* U' s        self.root.color=BLACK
    ' s  d6 T! X3 n: C        / F1 R; X7 o8 A# B
        ( d$ G/ l/ j3 r! R  c4 R
        def rb_search_auxiliary(self,node):0 s+ D7 A+ g. L1 g3 `
            tmp=self.root- z, E  ^5 K8 g. w
            parent=None6 o& v# y4 P# U+ T
            while tmp is not None:
    + i2 z2 S2 l( t! r' p- P8 v8 g            parent=tmp3 S2 R$ p2 \2 Z5 x" G9 v. c& l
                cmp=self.cmp(node,tmp)* K$ c& b5 B9 J/ V
                if cmp<0:& E& r# s2 Q, ~5 C
                    tmp=tmp.left
    7 n7 w" @. T3 k& W9 `, b            else:
    6 Y, |5 _1 L5 T# G" S1 ]8 U                if cmp>0:
    5 c) y7 y+ D- c  A                    tmp=tmp.right
    5 G* g+ A5 o4 T1 r. V2 |6 ]* I                else:
    6 c2 t% D! L% B! w- G7 c# }                    return tmp,parent
    2 U3 g1 s$ U3 l% M: @& H7 e; m6 r4 Z; E+ L+ B
            return None,parent
    - t! A, ^5 s8 w1 h# |, ~# |2 O- W( t8 T4 @; k; _( j. g7 ?, v
        def rb_insert(self,data):
    2 l- u5 S* G& o' |5 X        tmp=None
    5 J# ~/ G5 z+ d  W- k4 |. i        node=Node(data)
    / F" o  ]6 x" ]; V: I' F8 q        tmp,parent=self.rb_search_auxiliary(node), j+ F6 o, \9 {

    + J* R' l; b& ?        if tmp is not None:
    4 K" [# F. ]" o' U+ Y            return
    8 \+ R+ S% J5 K* |% d, p' M  Z% i
    6 v, u7 S* r5 R( Q( {% ]4 N3 x8 \        node.parent =parent% L6 i" L/ I0 o* h+ X! R$ Q
            node.left=node.right=None9 A2 }9 w/ @2 A, z
            node.color=RED, N5 |8 N' A" R

    0 E0 m9 C+ k' g# F) G        if parent is not None:
    8 l# s; N) K  E7 u: B2 [
    9 x: u0 o# \) X5 F# D5 v. w            if self.cmp(parent,node)>0:
    7 l; L; @" ^. C0 z& e5 w                parent.left=node& Y$ }7 N! m1 U% [
                else:+ ^+ @/ X+ m5 B" J, _; P# A( V0 m
                    parent.right=node
    $ z& T5 ~+ z0 L: ~1 r, l6 ?  Q3 D        else:
    7 ]5 C, H4 B/ r. n; x$ c+ |            self.root=node+ O4 x" H& a! `$ C- a! Q
            return self.rb_insert_rebalance(node)
    ; S3 H8 t. W" p/ I* T( x$ G7 C0 Q/ T$ e: S, o# H3 {' ]
        def rb_erase_rebalance(self,node,parent):
    ( y6 h1 g! _0 {        while((node is None or node.color==BLACK)and node !=self.root):( l$ J( p  {' _
                if parent.left==node:) t( L" n& G) n* C' f1 _
                    other=parent.right  |2 ~+ B; U/ @6 a
                    if other.color==RED:
    ' t5 @6 d' L% C0 u                    other.color=BALCK
    % Z4 \) d3 u9 W6 \2 h% ?0 |                    parent.color=RED. ^0 Q8 W4 v! `9 g$ s8 I
                        self.rb_rotate_left(parent)
    - e+ m' Y+ c7 C& d1 ?* G) p' V                    other=parent.right
      H+ O* m. i7 p' J0 X                if (other.left is None or other.left.color==BLACK) and (other.right is None or other.right.color ==BLACK):
    : J( e# S- c5 y2 N3 U9 y                    other.color=RED
    . J8 T9 @8 }  F                    node=parent
    3 A* y; H  s4 r. v                    parent=node.parent
    7 J) I8 `# C0 r% l) _# O                else:. |, A) o) G% T8 ]& n7 d+ S0 w: s% y
                        if other.right is None or other.right.color==BLACK:
    / n  Y9 w8 ]& n: B1 s: x
    * y$ _- E! |4 c7 I7 l                        if other.left is not None:
    : `, B5 N3 ?0 G                            other.left.color=BLACK
    0 O/ F; t4 i( X* U9 A% `" }                        other.color=RED
    ; y8 z0 L3 _0 k4 m9 O8 G- \- Z                        self.rb_rotate_right(other)
    . q! i; |1 u/ {. s5 }1 d                        other=parent.right
    ' A: M2 a: z; z8 _2 p
    & E9 C( p1 a+ g  v                    other.color=parent.color
    + P" o: U# A* D9 B                    parent.color=BLACK
    , n! A- d) P0 ?                    if other.right is not None:
    ! B6 p1 }) K- z8 T                        other.right.color=BLACK  A% {& ]. k  k! g& K7 E% H
                        self.rb_rotate_left(parent)
    ) G; N& I. o& ?( M0 v! P3 X6 P                    node=self.root- i7 e/ e+ c  W" y: i# R% M& r) o
                        break
    2 [5 @: f; n  T, ~- w! V( i            else:, p; O- p, ^. e- ^
                    other=parent.left* b: S$ ~% `" X& N" [1 D
                    if other.color==RED:
    $ L: N# }6 V5 l6 e4 N! S+ r                    other.color=BLACK' Y8 Y, [5 q* v: H
                        parent.color=RED
    + X" o- v( D$ C, S- ~* D6 o* B) \                    self.rb_rotate_right(parent)
    : O2 m4 ^& X% n3 J1 h4 e                    other=parent.left- Z: {( j2 c5 S1 j( v7 W
                    if (other.left is None or other.left.color==BLACK) and (other.right is None or other.right.color==BLACK):$ R5 _' [! t! h
                        other.color=RED
    ( v. B. K# ~  C8 U, |  k( m                    node=parent# D$ ~0 S/ L1 I# t$ w
                        parent=node.parent& }$ n) d3 C" m+ v. e- O( n
                    else:
    # \. y( M/ u8 w! U( e$ x9 Y  J6 L2 [                    if other.left is None or other.left.color==BLACK:
    0 [3 h7 s& H& ]# i4 T                        if other.right is not None:
    8 V# g% n3 }' {9 {4 v                            other.right.color=BLACK
    ( w3 r) B5 W8 x) T$ m0 s/ T5 O1 o6 r0 D7 E. u, r6 ~8 N2 J
                            other.color=RED
    8 L9 z4 F0 d: k% E0 S! a- m: g                        self.rb_rotate_left(other)
    & m# l# F6 x5 z) }% ?$ _' y                        other=parent.left. w' T% Y. `* U3 Z, `' Q* `

    $ l/ I+ h: e: U7 M/ e; u                    other.color=parent.color
    - d. d, I; T0 P; G- O1 r                    parent.color=BLACK) b: S5 r5 I8 Z" k8 u( ~) y
    % `, Z( f( Q" W) d, w
                        if other.left is not None:
    ! e. x! ]3 e2 s( @) E+ V                        other.left.color=BLACK* e+ D6 {! Q) S& J; [
    # |" O/ D( q6 |- D& J
                        self.rb_rotate_right(parent)1 P5 v! @- V. y; @
                        node=self.root
    % X6 r0 Q' ^) `3 ?  T2 ~                    break* T) T- M! r7 w& l

    & y( M& q* ]* I+ a& A1 o: j2 u& B+ m/ k; P2 W( @+ r+ T$ T# A

    + T1 V$ k9 L) u* X        if node is not None:: B7 A5 h8 I7 W0 U( s
                node.color=BLACK    ' |9 Z" t) S4 g7 L0 p) ]8 a0 n) i

    ' x8 J" K8 s) K0 o; j% C    def rb_erase(self,data):! G4 R" }/ i. s- c; ~; t
            tmp_node=Node(data)
    ' ^- a: x- o/ E3 o1 u& t        node,parent = self.rb_search_auxiliary(tmp_node)) @) _5 O7 O) T6 v# Z6 o! S
            if node is None:
    4 X. A& _; y+ t: S- Z1 F            print "data is not exist."
    % x# r7 N! y6 l! x( g- K( s  A6 L            return
    + Y( K; N/ k- ]( [6 }        8 F- d7 V3 o; X" ?# O+ \% }. s
            old =node
    * |: j% B, V6 ?) y& o        if node.left and node.right:
    ! a( {2 ]3 ?8 S            node=node.right
    " k( L& A' E; m$ Z; w. z+ Z0 T+ n6 k) T) p. K/ U) T! v' M: j
                left=node.left+ x: c1 [: B% X8 a7 P( _* D& R
                while left is not None:* u$ f# p" u. g8 }6 _' ^+ q* |
                    node =left% j# m; j4 e3 Q4 I
                    left=node.left
    6 Q5 C" D8 q( Z" N4 G+ m9 T( D2 N; Z# B6 L
                child=node.right
    3 m" Y" \- [. [% q* @            parent=node.parent7 c+ L- r; g" M* N2 L
                color=node.color9 H% ~& X0 Z& L. T
    + ?' x! Y* I$ N2 P6 r3 e3 C' t7 }
                if child:" @1 Z; \" I* }( m* ^
                    child.parent=parent
    " ?" `; q( @3 V/ J: ], o1 D            if parent:
    0 o! f( ~0 H: A& V, a; {                if parent.left==node:
    ( z" n% z! W& M, o' n6 a4 m                    parent.left=child
    1 d$ E3 e5 J5 Y% Y' {- ]                else:5 U" a1 n* s6 j  B* R1 L
                        parent.right=child
    3 N) M1 \% K( G* z. G7 C6 I! }( [, Z2 j6 r7 s
                else:
    1 y# M/ {8 }3 s2 t* G                self.root=child7 p+ I# a# k  _  H  L" q: p

    4 s9 d, {/ o$ d' I8 C3 u            if node.parent==old:
    / [. ~& I2 R$ d                parent=node
    ) ?' o7 c- ^6 q7 G            node.parent=old.parent& ^3 [; t( d( S- i% [: v
                node.color=old.color
    & f1 \2 ], S. |7 f  B# S            node.right=old.right
    0 E  L/ p- c2 U( O' G            node.left=old.left4 g  f  G( Z  p1 F6 G0 p3 o9 X3 {
    ' m! Y( t$ B4 l7 a
                if old.parent:8 x& U* q3 V# v7 P. Y* p0 x6 i
                    if old.parent.left==old:( H. G4 W& w3 O. R
                         old.parent.left=node
    ! m: G2 g! N5 p- N! |! v# @                else:
    # l. G! s$ [) [7 j' r1 M                     old.parent.right=node
    , e, a  e8 E  r" `            else:) g8 B! \# K+ {2 v$ {1 K
                    self.root=node8 _9 N# l0 h+ j) ]0 S  m
    ! B7 r( u0 P* ?. |
                old.left.parent=node+ f4 ?7 h! u5 O
                if old.right:
    6 [# h. V$ H4 V, H6 x* {                old.right.parent=node
    1 D# i3 H! K( A& Z( Y* G& ?5 R
    # J& H% i& H! e9 Z4 f7 J        else:
    $ s9 Y4 `  U. l            if node.left is None:& e: p2 q4 t/ R9 t( w
                    child =node.right
    2 T) C; Z0 L2 ^% |% ~1 @8 B! e2 B. H            else:
    $ D9 t0 D+ ^, z- g8 O" e                if node.left is not None:
    * v& B  Y6 G+ Q! q" n5 @7 l" ~                    child=node.left
    & }4 g* R  K7 ~  U- |                else:& G" H3 d& o, R, W9 Q) P7 z$ p
                        child=None
    % W0 {' P; ?1 `3 f/ |- G6 k            parent=node.parent
    ) g; ^2 O1 L9 S/ E, e            color=node.color
    8 Y. M: n3 e6 S4 h            if child:
    , T6 l8 a) d. V2 T5 u* e                child.parent=parent" j# X; C! g0 z* t9 G1 o
                if parent:4 |9 J0 z" x% t) Y. G9 X8 }# k
                    if parent.left==node:
    . H( K. U, V- k# [                    parent.left=child( k7 {1 a/ M' h8 U" l8 n
                    else:
    - J2 o  M) j. e2 O) v! R                    parent.right=child
    : u" ?- @7 U7 [- Z! k% O1 F% {            else:2 C  b1 P6 T0 ]% q3 {
                    self.root=child
    2 E9 q  J0 r% z! n
    3 g) Z0 e! b* ^. E        if color==BLACK:3 w) {0 D6 @1 O& U1 X6 v

    + @" P9 l& C8 c- E            self.rb_erase_rebalance(child,parent). b/ `! t1 F* ]! @; Z

    " [6 ^$ k/ F9 Z  g: H
    ; p0 t$ i9 `) D    def rb_travelse(self,node):
    ' W) m& Q6 g( [6 W9 V1 O/ _         if node is not None:
    0 n! X0 A- L6 L             print str(node.data)+'\t'+str(node.color)
    8 e% w$ P% u$ V' L- i$ K( @# d             self.rb_travelse(node.left)
    " X: m' q/ f8 @$ s             if node.parent:; M0 }# h5 |& U; \, {# j( |
                     if node.parent.color==0 and node.color==0:
    3 ^3 H' R2 o* |+ x1 O2 z- S                     print "error"0 ~) M( D1 y9 l" w; w: O
                         return
    - p7 V; b9 W  y4 [" d* m             self.rb_travelse(node.right)% U3 i8 h8 ?: b0 s
                 if node.parent:
    ! S3 J7 D% ~( K8 I" I' x# y8 [                 if node.parent.color==0 and node.color==0:
    1 w" o: m" ]( P% E7 G* ~                     print "error"2 g3 [. r# K! N! C  d: I& x
                         return
    ) K, ?& ~* W# {  c6 g+ U4 t' V
    " ~  Y8 S8 O9 W1 j1 d3 \7 S6 I; \         return
    0 A, `- r  f3 y9 _$ [# T                9 ^% {& A4 p8 b0 f
         ' \7 {  n, F/ V0 ?# b/ m5 S
        def cmp(self,node1,node2):- b& j  }( I# O  h2 J
            if node1.data>node2.data :1 c5 D; \, Z: @: j3 ], J- P
                return 1
    + d& R# U4 n% M2 Q, g        if node1.data==node2.data :# x) Y; P; e$ L
                return 0
    8 d/ T: O7 H8 r$ v        if node1.data<node2.data:
    " V) s4 g  W  X. X* s6 u: h            return -1& A3 ]4 W% ]3 R6 x5 q: _0 t; T0 B
    & g' u* R! X- L
    if __name__=="__main__":6 R  Z: n& }) O9 G
        print "main"
    . F. m/ k# v. h& i' Q# r$ g    data=[28,6,39,78,6,43,61,56,71,38]7 ?- [9 c8 P3 n' M7 M8 A& i
        #for i in range(10):
    9 c- @9 g; g6 k" ]7 G    #    rand_num = random.randint(0, 100)
    1 S) H1 @2 [9 Y+ `9 q, S; ~    #    data.append(rand_num)
    * o" s7 `" L, Q1 o, E, g0 L; I# n    #print data$ @/ u- B/ y* Y+ k
        t=RBtree()9 ~$ P* ^) U8 x
    $ @) X6 c# R. x! F; U: K8 x

    + C! k) A* K- ^- f    for i in range(10):
    ' d2 f8 b( Y7 k        t.rb_insert(data[i])3 H& Q4 c& J. D2 x9 i

    2 E# e) c+ q4 e# u- V- N7 W, D9 `5 \" u6 l  C
        t.rb_travelse(t.root)
      }+ f7 R1 W+ i
    9 u# t1 Q" N! u8 V6 n8 V0 E    print "---------------------------------"1 @7 h. i" A! u* j4 {$ N3 {  Q) B
        t.rb_erase(data[7])1 B  R0 B& N6 F7 s
            
    ! n$ b; D, m; D3 s    t.rb_travelse(t.root)4 o9 w- F: G% @. M6 M7 [
    ' O( u; a, M& A! w+ G% ^
    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, 2026-4-20 11:28 , Processed in 0.470217 second(s), 80 queries .

    回顶部