二叉排序树(BST)基本操作

二叉树的结构定义

typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild, *rchild, *parent;
}BiTNode, *BiTree;

二叉排序树的插入

int BST_Insert(BiTree &T, int key)      //二叉排序树的插入
{
    if(T == NULL)
    {
        T = (BiTree)malloc(sizeof(BiTNode));
        T->data = key;
        T->lchild = NULL;
        T->rchild = NULL;
        return 1;           //表示插入成功
    }
    else if(key == T->data)
    {
        return 0;           //表示树中已有该树,插入失败
    }
    else
    {
        if(key < T->data)   //插入到左节点
        {
            return BST_Insert(T->lchild, key);
        }
        else                //插入到右节点
        {
            return BST_Insert(T->rchild, key);
        }
    }
}

创造二叉排序树

void Create_BST(BiTree &T, int str[], int n)   //创造二叉排序树
{
    T = NULL;

    int i = 0;

    while(i<n)
    {
        BST_Insert(T, str[i]);
        i++;
    }
}

判断一颗树是否为BST

int pred = -32767;              //pre为无穷小
int JudgeBST(BiTree T)          //判断一颗树是否为BST
{
    int b1, b2;
    if(!T)
    {
        return 1;
    }
    else
    {
        b1 = JudgeBST(T->lchild);  //判断左子树是否为BST
        if(b1 == 0 || pred>T->data)
        {
            return 0;
        }
        pred = T->data;           //保存当前节点
        b2 = JudgeBST(T->rchild);  //判断右子树
        return b2;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36784975/article/details/83962542