题目:
假设二叉排序树采用中序线索链表作为存储结构进行存储,请写出该线索链表的存储结构,并编写算法输出该二叉排序树中所有值在a,b之间的关键字,其中a < b,二叉排序树左子树结点的值小于根结点的值,右子树结点的值大于根结点的值,树中没有关键字相重的结点。
代码:
// 二叉排序树的结点定义如下:
typedef struct Node {
int data;
struct Node *lchild, *rchild; //左右孩子指针
int LTag, RTag; //左右标志,0表示孩子,1表示线索
} BSTNode;
//算法如下:
void report(BSTNode *T, int a, int b){
p = T->lchild; // p指向根结点
while (p != T) { // 空树或遍历结束时,p==T
while (p->LTag==0) p = p->lchild; // 寻找第一个结点
if(p->data > a && p->data < b)
printf(“%d\n”, p->data);
while (p->RTag==1 && p->rchild!=T) {
p = p->rchild;
if(p->data > b) return; // 结点的值大于b,算法结束
if(p->data > a && p->data < b)
printf(“%d\n”,p->data);
}
p = p->rchild; // p进至其右子树根
}
}