数据结构-arithmetic二叉排序树

2017年学习的数据结构作的笔记,一些算法思想(伪代码实现)在日常学习中仍显得很重要,很多很多,在此记录整理不断补充,反复看反复理解反复记忆,加油!

1、判断是否为二叉排序树(Binary Sort Tree,二叉搜索树)

status BST(BiTree T,BiTree &pre)//pre指向被访问的结点的中序前驱
{
    if(T=Null)
        return TRUE;
    else
    {
        if(!=BST(T->lchild,pre))
            return FALSE;
        if(pre!=Null&&T->data.key<=pre->data.key)
            return FALSE;
        pre=T;
        return BST(T->rchild,pre);
    }
}//调用前第2个实际参数赋Null

2、合并两棵二叉排序树

void insertBST(BiTree &T,BiTree p)
{
    if(T!==Null)
        T=p;
    else if(P->data.key<T->data.key)
        insertBST(T->lchild,p);//小的放左边
    else if(p->data.key>T->data.key)
        insertBST(T->rchild,p);//大的放右边
    else
        free(p);
}
void mergeBST(BiTree &T1,BiTree &T2)
{
    if(T2!=Null)
    {
        mergeBST(T1,T2->lchild);
        mergeBST(T1,T2->rchild);
        insertBST(T1,T2)
        T2=Null;
    }
}

3、二叉排序树上小于x但最靠近x的值为a,大于x但最靠近x的值为b,求a,b

void closest(BiTree T,BiTree &pre,keyType x,keyType &a,keyType &b)
{
    if(T!=Null)
    {
        closest(T->lchild,pre,x,a,b);
        if(pre!=Null&&pre->data.key<x&&T->data.key=x)
            a=pre->data.key;
        if(pre!=Null&&pre->data.key<=x&&T->data.key>x)
            b=T->data.key;
        pre=T;
        closest(T->rchild,pre,x,a,b);
    }
}

4、平衡二叉排序树的每个结点增设lsize域,其值为它的左子树的结点数加1,确定第k小的结点的位置

BiTree Locate(BiTree T,int k)
{
    if(T==Null)
        return Null;
    else
    {
        if(T->lsize==k)
            return T;
        else if(T->lsize>k)
            return Locate(T->lchild,k);
        else
            return Locate(T->rchild,k-T->lsize);
    }
}

猜你喜欢

转载自blog.csdn.net/bertZuo/article/details/81534042