二叉查找树

来源:互联网 发布:web前端开发的软件 编辑:程序博客网 时间:2024/05/17 10:03

    使二叉树成为二叉查找树的性质是,对于树中的每一个节点X,他的左子树中所有关键字值小于X的关键字,而他的右子树中所有关键字值大于X的值。

1:二叉查找树的声明

#ifndef _Tree_Hstruct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;SearchTree MakeEmpty( SearchTree T );Position Find( Element x, SearchTree T );Position FindMin( SearchTree T );Position FindMax( SearchTree );SearchTree Insearch( Element x,SearchTree T );ElementType ( Position P );#endifstruct TreeNode{ElementType Element;SearchTree Left;SearchTree Right;};

2:Find操作
PositionFind( ElementType x,SearchTree T ){if( T == NULL )    return NULL;if( x < T->Element )   return Find( x,T->Left );if( x > T->Element )   return Find( x,T->Right );    else        return T;}

3:FindMin与FindMax操作

PositionFindMin( SearchTree T ){if( T == NULL )    return NULL;elseif( T->Left == NULL )    return T;else    return FindMin( T->Left );}PositionFindMax( SearchTree T ){if( T != NULL )    while( T->Right !=NULL )         T = T->Righrt;return T;}
4:Insert操作
SearchTreeInsearch( ElementType x,SearchTree T ){if( T== NULL ){T = malloc( sizeof( struct TreeNode ) );if( T == NULL )   errno( "Out of space!" );else {T->Element = x;T->Left = T->Right = NULL;}}elseif( x < T->Element )    T->Left = Insearch( x,T->Left );elseif( x>T->Element )    T->Right = Insearch( x,T->Right );return T;}
5:Delete操作
SearchTreeDelete( Element x,SearchTree T ){Position TmpCell;if( T == NULL )    Error( "Element not found!" );elseif( x < T->Element )    T->Left=Delete( x,T->Left );if( x > T->Element )    T->Right=Delete( x,T->Right );elseif( T->Left && T->Right ){TmpCell = FindMin( T->Right );T->Element = TmpCell->Element;T->Right = Delete( T->Element,T->Right );}else{TmpCell = T;if( T->Left == NULL )    T = T->Right;elseif( T->Right == NULL )T = T->Left;free( TmpCell );}return T;}

原创粉丝点击