二叉排序樹(BST)基本操作
阿新 • • 發佈:2018-12-20
二叉樹的結構定義
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;
}
}