应用题
38.已知二叉树T的结点形式为(llink,data,count,rlink),在树中查找值为X的结点,若找到,则记数(count)加l;否则,作为一个新结点插入树中,插入后仍为二叉排序树,写出其非递归算法。
【正确答案】typedef struct node{
datatype data;
int count:
struct node *llink,*rlink;
}BiTNode,*BSTree;
void Search_InsertX(BSTree t,datatype X){
//在二叉排序树t中查找值为X的结点,若查到,则其结点的count域值增1,
//否则,将其插入到二叉排序树中
BSTree p=t:
while(p!=null&&P一>data!=X){ //查找值为x的结点,f指向当前结点的双亲
f=p:
if(p一>data<X)P=p一>rlink;
else p=p一>llink;
}
if(!P){ //无值为x的结点,插入之
P=(BiTNode*)malloc(sizeof(BiTNode));
p一>data=X;p一>llink=null;p一>rlink=null;
if(f一>data>X)f一>llink=P;
else f一>rlink=P;
}
else p一>count++; //查询成功,值域为X的结点的count增1
}
【答案解析】