|
发表于 1-27-2015 01:52 AM
|
显示全部楼层
" S, B( j1 Z4 H* y8 i
乱写了个,请问lz这思路对吗?
7 L8 t( Y) l1 b# G4 s& u7 n* z# }( W% z5 G' d! V
2 P- \2 ]) e, c0 G6 X% l0 o- void splitTree(Node* node, int target, Node* &smalltree, Node* &largetree) {
4 d5 @- k* m7 `: G - if (!node) {
H0 W# F* @4 @3 d8 k5 c5 `7 t% ~) ? - smalltree = largetree = NULL;
8 f, H/ ` h6 c: x7 P. K3 h% H& m - return;2 M: I* }5 Y u( C {
- }
; @' P+ @# q4 y. n
0 I0 O$ p) \8 P- if (node -> val == target) {
1 ]2 y2 x0 a6 s2 @4 x1 Q - smalltree = node -> left;- t; ^" b( C- L, d
- largetree = node -> right;! I& v( \1 O' L5 p1 g) x S
- return;
! f' E& L, o. {1 y) ] - }
( y& D5 t) H+ p" v0 H3 t% o# Z6 U - 5 M# b- d* A; e2 ~) F: K" F
- if (node -> val > target) {6 {9 Z( G3 R7 O1 E$ A
- largetree = node;% o) ^8 {% g! P
- Node* leftsmall, leftlarge;2 ^% f8 ~7 V. g' _( h* F
- splitTree(node -> left, target, leftsmall, leftlarge);
8 v( N0 n7 Q! n: v% [% o - node -> left = leftlarge;& m' z( q% g+ i9 V* b' K! K
- smalltree = leftsmall# E# b9 [5 G' C* w2 L% Z4 \
- } else {
/ q- t6 \# [; | - smalltree = node;% h' l% {8 ~* O8 N5 J
- Node* rightsmall, rightlarge;4 E% ~0 x% b" Q. k
- splitTree(node -> right, target, rightsmall, rightlarge);& ^ C4 B# m. z
- node -> right = rightsmall;% u5 U% k' y) ~. P
- largetree = rightlarge;; Y W$ Q2 ?" |0 _5 \# O* K# a7 h
- }
复制代码 ; w- P5 s h6 S: U7 F. x2 w M
补充内容 (1-27-2015 01:54 AM):& N+ N8 e8 ^% L$ v( {+ p* W; l8 s
8到12行等于的部分应该去掉。20行开始的else这段来处理相等的情况 |
|