9.40.c
来自「部分高校使用anyview编程测试数据结构习题,此代码为数据结构题集(c语言版)」· C语言 代码 · 共 29 行
C
29 行
9.40③ 在平衡二叉排序树的每个结点中增设一个
lsize域,其值为它的左子树中的结点数加1。试写
一时间复杂度为O(logn)的算法,确定树中第k小的
结点的位置。
实现下列函数:
BiTNode *Ranking(BiTree T, int k)
/* 在含lsize域的平衡二叉排序树T中确定第k小的结点指针 */
二叉树的类型BiTree定义如下:
typedef struct {
KeyType key;
... ... // 其他数据域
} ElemType;
typedef struct BiTNode {
ElemType data;
BiTNode *lchild,*rchild;
int lsize;
}BiTNode, *BiTree;
BiTNode *Ranking(BiTree T, int k)
/* 在含lsize域的平衡二叉排序树T中确定第k小的结点指针 */
{
if(!T) return NULL; //不存在要求的指针,k小于1或者大于树的总结点数
if(T->lsize==k) return T; //T就是要求结点
else if(T->lsize>k) return Ranking(T->lchild,k);//在左子树中寻找
else return Ranking(T->rchild,k-T->lsize); //在右子树中寻找
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?