二叉搜索树
1. 非空左子树的所有键值小于其根结点的键值
2. 非空右子树的所有键值小于其根结点的键值
3. 左右子树都是二叉搜素树
二叉搜索树操作函数
1.Posltion Find(ElementType X, BinTree BST);
2.Posltion FindMin(BinTree BST);
3.Posltion FindMax(BinTree BST);
4.BinTree Insert(ElementType X, BinTree BST);
5.BinTree Delete(ElementType X, BinTree BST);
Find 查找效率取决于树的高度
Position Find(ElementType X, BinTree BST) {
if (!BST) return NULL;
if (X > BST->Data )
return Find(X, BST->Right);
else if(X < BST->Data )
return Find( X, BST->Left );
else
return BST;
}
Position IterFind(ElementType X, BinTree BST) {
while (BST) {
if (X > BST->Data)
BST = BST->Right;
else if ( X <BST->Data )
BST = BST->Left;
else
return BST;
}
return NULL;
}
Position FindMin (BinTree BST) {
if (!BST) return NULL;
else if (!BST->Left)
return BST;
else
return FinMin( BST->Left );
}
Position FindMax( BinTree BST ) {
if (BST)
while (BST->Right) BST=BST->Right;
return BST
}
BinTree Insert( ElementType X, BinTree BST ) {
if( !BST ){
BST = malloc(sizeof(struct TreeNode));
BST->Data = X;
BST->Left = BST->Right = NULL;
}
else if( X < BST->Data )
BST->Left = Insert( X, BST->Left);
else if( X > BST->Data )
BST->Right = Insert( X, BST->Right);
return BST;
}
BinTree Delete( ElementType X, BinTree BST ) {
Position Tmp;
if( !BST ) printf("要删除的元素未找到");
else if( X < BST->Data )
BST->Left = Delete( X, BST->Left);
else if( X > BST->Data )
BST->Right = Delete( X, BST->Right);
else if( BST->Left && BST->Right ) {
Tmp = FindMin( BST->Right );
BST->Data = Tmp->Data;
BST->Right = Delete( BST->Data, BST->Right);
}
else {
Tmp = BST;
if( !BST->Left )
BST = BST->Right;
else if( !BST->Right )
BST = BST->Left;
free( Tmp );
}
return BST;
}
平衡二叉树