QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 8454|回复: 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
    + V  h7 ?& A* r) j0 L# -*- coding : utf-8 -*-
    * H: A4 {8 ]7 H! l3 I8 ^' N% V  W3 x6 w% j
    import os
    " w! d' G% m$ m) gimport random& `4 q0 u+ P3 v% _8 \

    5 Q& D. K* ?) p; I# BRED = 0, J+ _$ R2 b; G
    BLACK = 17 l# e3 v, G( U- v; j
    8 [: r# Z- H! R4 S5 s8 n) B) R
    class Vector(object):
    , V% Q% |! r/ R+ q( s: }    def __init__(self,x=None,y=None):
    & q8 y/ D, j$ u+ {$ ?, P! P        self.x=x0 f! w2 q3 b& p
            self.y=y
    3 h( N' J" l( y/ n0 i3 }
    & W7 a9 q- q4 J& Mclass Node(object):
    4 y2 l4 j7 e5 H3 L0 v        """docstring for Node""", j" y  i$ @" I* |) S1 R% U
            def __init__(self,data=None,color=RED,left=None,right=None,parent=None):
    2 Y$ o) f8 I9 f            self.data = data
    / P1 P; E9 z# I! @            self.color = color
    % Z: E% |8 D: q" ^7 K0 k& L) D            self.left = left! i2 D! H$ i0 w, `7 o
                self.right = right) y! p2 J6 i0 A" f- j2 P
                self.parent = parent
    $ k# Y5 _0 X! A" @& @/ k
    7 O, W+ i# T, f; jclass RBtree(object):
      i0 j8 r+ V! V3 {6 O6 `    def __init__(self):
    / E) P4 A# S7 J( W        self.root=None0 p- V: m8 v% u3 z2 P1 o
            self.size=0. m" [. K1 I4 M0 l% a8 b9 I
    ' A% h8 c+ R, a0 }6 @
        def rb_rotate_left(self,node):! a/ E( Z. P9 O
            right=node.right; }+ B! P& w6 ^

    ' Q! F4 O% m/ Y  I2 _        node.right=right.left6 }9 ?4 F' _- L( }6 U; _% U
            if node.right is not None:7 Y, z5 k# C  w! P& F
                right.left.parent=node
    9 p3 j# E/ s$ O+ n9 E4 M2 W2 j8 p/ k, K
            right.left=node
    2 ^1 z+ i7 n+ K3 t: a        right.parent=node.parent; [$ W2 T/ e5 Z7 J7 s$ C9 Y: J# q

    : c, A* ^6 X; w) X- w        if right.parent is None:8 G0 F% z5 T  V' ^: m+ \1 B0 j
                   6 Q: b5 U0 q5 i+ d( L' }
                self.root=right; X# B& F4 {0 g: K6 D& O: }
            else:
    . \  T; S+ q6 O1 {" d2 L( I6 _            if node==node.parent.right:( Y) ~( e' A' F* T5 D6 Q1 r, z
                       node.parent.right=right
    ) H3 x/ K1 r0 m/ _. N: A& |            else:( E) Q- U8 x% G0 `: G
                       node.parent.left=right" r+ j& s3 C% k; o3 }3 J
            node.parent =right2 j" R0 A- W5 [% I. ], ?
    4 f  t! c  L$ d' {

    9 j# ?: _* u9 P( I! ~5 Z1 {    def rb_rotate_right(self,node):
    : d' J) ]' v- n. }9 X        left=node.left( l. B2 G0 h3 ?8 m
            node.left=left.right4 Z" j" l3 G- V9 }: i

    0 b; b" Y0 F8 b( }        if node.left is not None:: a4 t, J: K. @2 k8 D. W! @* d
                left.right.parent=node
    ' T( a2 r2 ?* q: l' s# J6 S
    4 z  a$ K) F7 I' v( X% X* m        left.right=node. {5 K$ X$ O* O+ u. j+ V: P& ^
            left.parent=node.parent1 G+ |. R$ O: H; ^9 E8 S9 K

    & [& E. q; c" l5 n, P3 v/ ^" p        if left.parent is None:) x8 ^! {. B8 k9 [. z4 ]8 e
                self.root=left0 Y- P! _$ P. _3 i
            else:/ o/ \8 u1 v1 `! K8 @3 h3 W0 b! a
                if node==node.parent.right:9 ?3 U  o2 l! w7 K. a2 O2 ^- r
                    node.parent.right=left! o  Y3 |) B0 T1 ~
                else:$ Q7 R, H7 ~- p: O0 {
                    node.parent.left=left
    2 Z7 d: m4 Q: `: \. W        node.parent=left
    8 Y& A2 g- ~$ I
    2 @% C: {8 T" S& u! V    def rb_insert_rebalance(self,node):/ B/ ?0 `+ L% e
            parent=node.parent
    ! s4 Y& i3 r' }+ t0 a. ~$ ]        while parent and parent.color==RED:
    ' P; R9 _2 P( E% v  w2 J            gparent = parent.parent: @4 l) N- f- @1 I2 N0 m
                if parent==gparent.left:
    6 v+ ]+ k2 d7 r6 f                uncle=gparent.right6 d* W0 K1 d7 c) G/ \7 v- g
                    if uncle and uncle.color==RED:
    ' e. G% |( e  h3 `! B                    uncle.color=BLACK, n# u8 `1 Z; }! f
                        parent.color=BLACK! \/ S1 x  Y# u
                        gparent.color=RED( A9 p$ X; O+ d! E6 U8 x# U
                        node=gparent+ s3 l9 d  j, N- Q2 |7 R+ u2 h/ K% v
                    else:
    + P9 P8 O7 v' q                    if parent.right==node:3 M5 R$ {  K; y5 F
                            self.rb_rotate_left(parent)0 k3 x4 X% t4 c: f+ x' H
                            tmp=parent
    & J9 h- m% ?! C                        parent=node
    * H8 ~9 N) n/ N$ S/ g, Z+ D                        node=tmp
    ' _1 M, t: @: b0 s% k                    parent.color=BLACK
    $ e3 i; p+ e: d. e                    gparent.color=RED
    8 S8 ^# d1 W" a% ~
    / ]( T* V( Y! P                    self.rb_rotate_right(gparent)) u9 B( ~# A  ?: O9 ~3 _
    ) C- X/ |5 E/ g6 q
                        if uncle:: P; R8 f, U! _0 V6 Q/ _
                            if uncle.right:. W. |3 D% I5 e7 X% ?
                                node=uncle.right- [$ i$ M0 o  t  L/ r
                else:. e# W; i1 _" L
                    uncle=gparent.left
    9 ^; K  a5 p0 @6 d# m- g9 g                if uncle and uncle.color==RED:
    ( p& f- L! m* D9 g  y6 u                    uncle.color=BLACK7 I+ W% K- X% R! R+ L; B
                        parent.color=BLACK
    , r% L" ]( [3 |5 [                    gparent.color=RED
    # q' ?$ K- I* L- t* L                    node=gparent
      r9 _; G* H) w5 v. a: z                else:) E( v  S7 ~4 R5 u
                        if parent.left==node:
    5 W+ X% [) ]5 q8 x" R                        self.rb_rotate_right(parent)
    % K+ w4 s- a, `0 r. K) _- B9 s$ p( y                        tmp=parent
    3 j% M9 W6 v5 |                        parent=node8 g  B3 I8 K' c5 E
                            node=tmp
    ; R% ?: l* i2 g( L$ d2 j+ b6 n                    parent.color=BLACK
    $ Z/ o1 Y( S/ D% d8 H' c                    gparent.color=RED
    ; m9 X' t2 x+ L$ a$ |/ J3 Y8 F                    self.rb_rotate_left(gparent)/ S$ n2 \$ `7 T. Z1 d! G3 Z
    ; B: `  |( t* m1 }$ {- ~3 X. X
                        if uncle:
    # j$ u6 S9 w' ?2 C5 \                        if uncle.left:( {0 a4 I4 f7 \
                                node=uncle.left
    $ q4 \/ M3 {1 r            parent=node.parent
    : S, N  y) N* K' W; ?4 X' J3 M5 h  S! V

    & S% A+ ^% b) v8 X8 b        self.root.color=BLACK3 y9 m5 g$ a8 c6 p. i: @: e0 S5 x7 d
            % r; s. K) ^! ~  }
       
    8 a: n. R( @7 B8 w* Q    def rb_search_auxiliary(self,node):
    + N* C  h* P7 |5 R        tmp=self.root
    2 M0 l8 O5 L; h$ x        parent=None0 Y, B# a6 h. R( r0 q7 u
            while tmp is not None:: p6 A6 F0 s' q* ^4 H
                parent=tmp
    ( [& C, D! S2 m8 ^' _) D, ]% F            cmp=self.cmp(node,tmp)
    0 t2 N: @) t, v. W& x5 }8 f            if cmp<0:
    6 \) L; n% `: w& z% @+ N' T                tmp=tmp.left( n8 |- ~6 {7 ?7 V3 e8 i9 J
                else:* L: s) a1 b# O5 D  z5 Q
                    if cmp>0:8 f- w( B4 v4 f$ |6 S
                        tmp=tmp.right" s9 }: U$ W1 x5 O
                    else:
    ' N1 F+ J/ e9 E4 {8 [                    return tmp,parent
    . t& ]* t. R, c5 R& E0 O+ b9 G7 f3 s/ G6 q9 M/ N! S
            return None,parent
    . ]' {1 L; `3 v8 M% ^
    ' o- e" c, K# U: I    def rb_insert(self,data):1 {, @0 k3 a8 u
            tmp=None, ~3 C% I# o  x/ S% J
            node=Node(data)7 d, W7 U3 b* u# R
            tmp,parent=self.rb_search_auxiliary(node)2 e4 P: e# H: C2 l) [

    & T+ {1 N8 _3 M) g        if tmp is not None:
    $ R; S0 E: Y- O$ |8 l            return 2 u% h; _4 H: o7 V" x
    - \! y9 ^  W" b( @" J  R3 j! H
            node.parent =parent: ]! x: l! u+ e& d; ~2 |4 l
            node.left=node.right=None
    7 z" P# z( d- l9 K1 Q+ Y! k        node.color=RED  T- R1 v/ `3 F6 ~% {8 M* {

    ) H! ^% c5 D6 b, i# N9 G        if parent is not None:
      Y9 z4 w3 ~/ v; h
    0 J6 `. m3 \* Z  L" r            if self.cmp(parent,node)>0:1 H8 C4 H: {% N+ U1 M
                    parent.left=node
    ! A; X& F$ G. m, v4 t            else:
    4 z8 M7 i7 ^, O! {# ^                parent.right=node
    $ v# s; q! h$ b, T7 r% T0 {8 }        else:
    1 }) h3 t* Y2 u4 B$ W6 O; T! H            self.root=node" I, v5 R) W$ x( q7 K
            return self.rb_insert_rebalance(node)
    # l4 S% V& i" }" b
    , C$ ?! [& g- J. H# a- k6 i    def rb_erase_rebalance(self,node,parent):  G/ f' |7 f. i& U( h6 d- r
            while((node is None or node.color==BLACK)and node !=self.root):6 M$ J. I3 a, {  J9 G) o
                if parent.left==node:
    7 c. C! [' E: V" e                other=parent.right
    ( w" W8 V) \# m1 e* `( _8 Q5 ~                if other.color==RED:$ v! x0 B6 S; f
                        other.color=BALCK
    ( p3 f2 \0 t7 \$ t1 R* K% T                    parent.color=RED+ ?0 D# e7 V, N
                        self.rb_rotate_left(parent)
    # E8 G: z4 L# u: s% j                    other=parent.right: t/ ], B2 P# C0 ?
                    if (other.left is None or other.left.color==BLACK) and (other.right is None or other.right.color ==BLACK):
    - d! _# ]* W) U2 }; F, E0 g                    other.color=RED
    0 z/ F" \5 R! S                    node=parent
    ! y% |. n$ c6 p/ G" t  k; j" N                    parent=node.parent
    2 X$ n) k* f: x4 W' I/ ^                else:
    * v$ a0 Z) M' O- j9 ?                    if other.right is None or other.right.color==BLACK:; q' h! W. R8 h8 U3 m, \( d

    9 S. r" b) [7 m. D% o                        if other.left is not None:
    ; R+ U: n7 G; o" K4 e) I& {$ H                            other.left.color=BLACK
    / O, g) D1 O' I' q) X: X5 a! g0 k  y; g                        other.color=RED
    ' h# {1 r' r' m6 R                        self.rb_rotate_right(other)9 t' H6 E( ^. P: o
                            other=parent.right
      i5 ?, \% C- U* _
    & h. U1 H3 v  b8 q                    other.color=parent.color
      L7 V$ V4 w1 p7 x% D- j" a$ l/ B                    parent.color=BLACK
    3 n: X/ D; B+ ]& E; `                    if other.right is not None:
    9 |. l$ J; l% p/ d                        other.right.color=BLACK
    . o$ ^5 g* c& H+ R( N6 Y                    self.rb_rotate_left(parent)
    1 w$ I, _  ~" |                    node=self.root" A; G- T. B/ s% I/ N; }; K+ U: z# E1 n
                        break1 R8 `% X% y& g3 c/ m9 S
                else:
    : B" l% q7 Z" t  p* H: @                other=parent.left
    % M2 I. E; @+ y/ c) j" f                if other.color==RED:1 b( v* G7 p3 f8 Y7 l" H9 W
                        other.color=BLACK
    4 m9 B1 c( R+ {5 g) A                    parent.color=RED3 v  Z' P% e' S% N: G
                        self.rb_rotate_right(parent)* b  v% d: A9 x0 A
                        other=parent.left
      g& P; f0 J! b4 h0 b  h                if (other.left is None or other.left.color==BLACK) and (other.right is None or other.right.color==BLACK):& ~8 M8 N- S/ \3 }6 n0 k( r
                        other.color=RED
    9 V1 \4 k) a& C- d) A                    node=parent
    3 j* o! }3 s" X; W& ~                    parent=node.parent0 B: E$ B! j0 x4 n( U
                    else:
    $ ^6 i# l  L7 f$ W7 u                    if other.left is None or other.left.color==BLACK:2 R* w8 E& W: F1 S0 a1 q
                            if other.right is not None:
    3 n9 A1 s( |7 R% v' X6 @- B                            other.right.color=BLACK( ^: q/ {. j, i: i/ l
    . T0 F0 H2 ?" m2 d* S$ m7 l. _
                            other.color=RED
    ( a- N& {4 I* n- q6 s: x9 i/ E                        self.rb_rotate_left(other)
    8 W8 @+ l! W* r7 H8 h                        other=parent.left
    4 W# w! r$ T8 E2 L- F# v6 N2 ?  O" L3 K; a5 d1 i. ]' l% `6 Y! Q; r
                        other.color=parent.color
    5 K6 ]: |7 b* H3 I$ \8 q                    parent.color=BLACK
    3 |6 Z: L3 [( G% w+ g1 g( k7 a
    5 o+ u0 \, Q5 j; ~) m8 M9 j                    if other.left is not None:
    ( J! {* t7 D! U, n0 a  k2 p0 }  v                        other.left.color=BLACK# z4 x9 L! N5 I& T( Z3 N

    ! _% x0 M/ n& c" m: R3 ]0 J3 c, k$ t% E                    self.rb_rotate_right(parent)
    ) U- ]3 _- I1 J* x7 J                    node=self.root) G, g& G- F5 w  }8 j. D
                        break
    + U% A# d' C3 K( k# G, G3 E- k/ G0 x4 l6 P

    % z0 i; B. _$ P3 i
    4 b8 l3 s8 A4 A  C        if node is not None:4 t' E0 y( t: s( H. B0 r/ F1 I
                node.color=BLACK    8 {* X7 R, r' I& Z  ~/ t

    ( d" X9 I' U8 B+ L  y7 j' ~/ S4 z    def rb_erase(self,data):9 g; T1 k# K! c% S, w8 t
            tmp_node=Node(data)0 U2 B0 R  |' i0 I9 Q  c
            node,parent = self.rb_search_auxiliary(tmp_node). m6 A1 k9 |/ m- ^' O9 a3 N
            if node is None:: f( j( r* {& ~. Y( l
                print "data is not exist."0 L& E( H% T/ N7 j9 Z  c3 p% E! D6 W
                return# e/ i3 `2 q& ?
            
    . m' \* a8 ^. M& E, B. A        old =node
    ; W8 s2 {# v$ p8 Y        if node.left and node.right:
    6 J! P9 L/ P& T            node=node.right
    & x0 `5 B6 c6 K  V' A+ X" ]/ W! o0 o5 }: v
                left=node.left0 t' r8 E5 H& Y, N, T" M0 u8 S
                while left is not None:1 |" C$ V( H5 v/ h
                    node =left
    3 I: K: z' `9 P  C                left=node.left
    " o' b2 E/ [) H0 M
    + x. @3 S6 F" D. x5 [: ?- H2 E            child=node.right
    & h% A. w, L8 k3 S0 g            parent=node.parent
    7 O: N" ], O% |/ x+ ]& j            color=node.color/ E/ ]3 H9 {. _2 ]  q1 c0 X
    - p, a; D8 F  i6 z( s
                if child:
    9 o: \4 w+ @* b+ J6 D; Y                child.parent=parent0 i% c% ]  \3 u0 T
                if parent:
    8 A) u. k1 l; U                if parent.left==node:
    + M8 c% R* Z7 D# k4 w7 u6 E3 j6 e                    parent.left=child8 R; x  N3 |5 Z0 z, s7 X
                    else:0 x% F. U; m4 j
                        parent.right=child
      {% a& N) ]6 ~
    9 M# |1 @. w1 g. e            else:
    : j0 `3 Y% V7 C6 r( T                self.root=child
    ' ?* [/ v3 g5 d# j
    + p" r- E; w/ e; h5 Y            if node.parent==old:
    % S) _9 |" K, n/ g0 K                parent=node
    " J9 x1 `  Z7 H# d+ Y            node.parent=old.parent% b0 A4 h3 x7 U9 Q' s" T+ V
                node.color=old.color
    2 y6 n& o6 {$ S( O            node.right=old.right
    : o0 Q% N* K) B9 M0 o0 e4 a- D            node.left=old.left+ T% g6 M+ g9 _
    - i6 ^; U( x. ]
                if old.parent:* K4 s. L1 N% ?
                    if old.parent.left==old:5 ]6 _/ m1 u0 [
                         old.parent.left=node
    % ~$ t0 O8 }! d) \" k' F                else:
    8 I4 d, ~4 g1 Y/ @3 ^  C' h/ U$ W: ?" L                     old.parent.right=node
    & P1 D+ x" j7 w, Z            else:
    1 C- ?% A1 F7 r2 N, s7 Z                self.root=node4 z& L* A# q3 e) P
    , B$ z; J+ v7 F# Z8 e7 f/ q
                old.left.parent=node
    2 m. R# z, n  a3 ^2 c  l            if old.right:/ M+ w! E8 }- ^  N) I
                    old.right.parent=node
    1 k& W# H$ v# n
    # B! V7 u3 G2 L4 o: i% D        else:
    1 c+ ~! ]7 E7 X# t            if node.left is None:
    4 R: F* m3 `0 v; j                child =node.right
    1 p/ b8 ~% w. ]7 s            else:. {1 C5 I9 Z% j# W7 k& x
                    if node.left is not None:' c+ Q; ^- H, w# m/ F& \: f; c$ \
                        child=node.left
    4 X! r! n- q1 u* K! K7 J                else:
    # _, g2 o# ]/ i3 D) ~# Y4 e                    child=None' Y7 ?2 j6 M1 y/ _" z. d3 h
                parent=node.parent
    5 z& H& C5 F. \# `' y            color=node.color
    ' }# v$ N) b" M. q( [8 q            if child:( ~, ]0 v1 e$ l- ?+ l
                    child.parent=parent- N) d/ a3 v& `
                if parent:
    * S+ M9 c! N7 [                if parent.left==node:
      w/ z7 h( K: B, \2 X                    parent.left=child. W) S) r  C( a) K# O- m
                    else:
    + H# @4 W3 ^2 I8 Y. |                    parent.right=child
    ( s% v  Y! |$ \5 i            else:
    5 Y0 ?$ }" Q1 T3 _0 z3 J6 h6 q/ p# l  |                self.root=child
    5 b$ N/ x+ A, \# F# d+ o
    6 v; o( r% d. c3 W4 Z1 ^        if color==BLACK:# ^1 _: q# Q7 w) G8 P

    0 I5 r# b; P/ q* Q2 n9 b& P- i            self.rb_erase_rebalance(child,parent)
    & K. }) Z4 \' A. A( D- _9 ~2 j7 @& f9 K
    : k8 {" h* A* E& q- Z' O8 A
        def rb_travelse(self,node):' {* B1 d4 b, ?. O3 r
             if node is not None:
    ( q7 S% V) I2 M% m# {             print str(node.data)+'\t'+str(node.color)
    ) _  }" R4 M$ q8 g; r             self.rb_travelse(node.left)2 u3 Y7 \% P* u9 T# Z% p
                 if node.parent:% d0 }6 @. W& H( Y
                     if node.parent.color==0 and node.color==0:- [6 W2 S, q+ T7 P- P
                         print "error". Z0 A$ G2 n/ h/ `3 X- l
                         return
    + P- R- r8 F' V- v: w# s             self.rb_travelse(node.right)
    " m% e- C- E% p6 P& A1 `             if node.parent:
    & N( i* U* h( @! ^1 o                 if node.parent.color==0 and node.color==0:
    7 ?6 e6 h% s; x4 w  E                     print "error"+ Y+ |5 f# H4 \2 k% Q- D
                         return
    8 h3 K: l' D/ A; g% X( B
    : P7 }8 X/ j0 g7 X8 K, V1 S         return
    5 Q/ C7 ~% Y( x; a5 D  e               
    0 y# ]+ q8 ^& v2 u     
    / T6 C+ a  h; ?! Q$ z4 f    def cmp(self,node1,node2):
    2 t8 ]: A0 C& @$ t, p2 s        if node1.data>node2.data :& M# e7 q% m: Z. C7 ?, e
                return 1
    . ~) d, d* }- R% S2 \        if node1.data==node2.data :
    ! `9 E+ j8 h" C! f' T            return 0% t. D; M+ r& y4 K
            if node1.data<node2.data:
    , [9 o4 _8 W& n& t1 @            return -15 ?) _: s1 Y5 c4 e* m! ?4 y
    - u1 F) U# T. V
    if __name__=="__main__":
    + k/ [; T9 _1 c/ H    print "main"
    ' L$ v; J- i0 m; }/ {' z    data=[28,6,39,78,6,43,61,56,71,38]+ x+ d2 p# A& D7 n" A! K2 o, Q
        #for i in range(10):! m# P( k  c1 [
        #    rand_num = random.randint(0, 100)
    : a8 \: H2 \& Z    #    data.append(rand_num)
    # \+ }% ]( i" {    #print data2 U: R4 A) [% j$ s( s
        t=RBtree()
    # t( J6 q+ r% r- d, ]7 \
    4 P: b, b5 [1 @; b9 N! G0 X6 v7 z7 g( Y, j( ?* _
        for i in range(10):
    6 P2 Z8 ]/ y/ l/ @8 w$ h3 N. ?        t.rb_insert(data[i])8 {9 l7 c- ?- s+ X6 b8 [
    * y! R- n4 a* \+ x- t
    9 V3 u9 I& C( q$ g* Y6 `/ U
        t.rb_travelse(t.root)- D9 G- X5 r" a/ R4 T2 ^

    8 E  c0 Z0 D7 |) ?    print "---------------------------------"
    # h( u! A) m* j% S% n7 a2 ?    t.rb_erase(data[7])3 q4 w8 s/ k8 `) p9 R6 L
            
    6 Y3 R. L$ E6 s1 f    t.rb_travelse(t.root)
    - ~  i. o6 b2 f% o- V3 ~: f2 l! C1 a, w, q; v
    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-6-3 03:48 , Processed in 0.616381 second(s), 80 queries .

    回顶部