// 因为p所指结点的地址不会改变,故p不需是引用类型 249
int j; 250
if(T) 251
{ 252
253 if(i==1) //c插入为p的长子。 254
{ 255
c->nextsibling=p->firstchild; 256
257 p->firstchild=c; //c成为p的长子,原长子成为c的兄258
259 弟。
} 260
else 261
{ 262
p=p->firstchild; 263
264 j=2; //插入标记,j==i时插入。 265
while(p&&j<i) 266
267 { //遍历p的兄弟。 268
p=p->nextsibling; 269
j++; 270
} 271
if(j==i) 272
273 {//找到了,插入。 274
c->nextsibling=p->nextsibling; 275
p->nextsibling=c; 276
} 277
else 278
279 return ERROR; //j!=i,说明p孩子树<i-1。 280
} 281
return OK; 282
} 283
284 else //树空。 285
return ERROR; 286
} 287
288
Status DeleteChild(CSTree &T,CSTree p,int i) 289
290 { // 初始条件: 树T存在,p指向T中某个结点,1≤i≤p所指结点的度 291