您的位置:首页 > 其它

二叉排序树

2012-09-05 10:58 253 查看
一.二叉排序树

二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树
1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3. 它的左、右子树也分别为二叉排序树。
1. 二叉树的存储结构

typedef
struct BiTre{
int key;
struct BiTre *lchild,*rchild;
}BiNode,*BiTree;

2. 在二叉排序树中按值查找一个节点

在二元排序树b中查找x的过程为:
1. 若b是空树,则搜索失败,否则:
2. 若x等于b的根节点的数据域之值,则查找成功;否则:
3. 若x小于b的根节点的数据域之值,则搜索左子树;否则:
4. 查找右子树。

//查找某个值的节点
void SearchNode(BiTree T,int key,BiTree &t)
{
if(T->key = key)
{
t = T;
return ;
}
else
{
if(!T)
{
return ;
}
else
{
if(key < T->key)
SearchNode(T->lchild,key,t);
else
SearchNode(T->rchild,key,t);
}
}
}


1. 在二叉排序树插入结点

向一个二叉排序树b中插入一个结点s的算法,过程为:
1. 若b是空树,则将s所指结点作为根结点插入,否则:
2. 若s->data等于b的根结点的数据域之值,则返回,否则:
3. 若s->data小于b的根结点的数据域之值,则把s所指结点插入到左子树中,否则:
4. 把s所指结点插入到右子树中。

//二叉排序树的按值插入一个节点
void InsertNode(BiTree& T,int key)
{

BiNode* P = T;

if(!T)
{
BiNode* bNode = new BiNode;
bNode->key = key;
bNode->lchild = NULL;
bNode->rchild = NULL;
T = bNode;
//	return 0;
}else
{
if(key < P->key)
InsertNode(P->lchild,key);
else
InsertNode(P->rchild,key);
}

}


1. 建立二叉树和中序输出二叉树
//建立二叉树
int CreateBiTree(BiTree& T)
{

int k = 1;
cin >> k;
while(k)
{

InsertNode(T,k);
cin >> k;
}
return 0;
}

//中序输出二叉排序树
void PrintAllNode(BiTree T)
{
if(T)
{
PrintAllNode(T->lchild);
printf("%d ",T->key);
PrintAllNode(T->rchild);
}
}


1. 二叉树删除节点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: