问题如下:1.查找在二叉查找树中按大小排名为k的节点(如果元素x排名为k,则有k个元素排在x的前面,排名以0为起点),以升序排序
2.给出指定键值,返回其在二叉查找树中的排名,升序排序
第1个问题分析:1.任意节点的左子树中的所有节点一定排在自身前面
2.如果左子树中节点不足,比如查找排名为6的节点,但左子树中只有3个节点,则在右子树中查找排名为k-左子树节点数-1(根)的节点
3.如果左子树的大小=k,则返回当前节点
因为需要频繁计算左子树的大小,所以我们使用一个名为size的函数来单独计算,size使用递归实现,但如果树极不平衡或树极大时栈的数量将不可接受,那时可在树节点中加入一个元素来记录每一个节点下的子树大小:
代码如下:
typedef TreeNode * Tree;
typedef TreeNode * TreePosition;
size_t size(Tree T)
{
if (T == NULL)
return 0;
if (T->Left || T->Right)
{
if (T->Left == N