1. 程式人生 > >二叉排序樹(BST)基本操作

二叉排序樹(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; } }