来自大学mooc陈越的《数据结构》
BinTree Insert( BinTree BST, ElementType X ) { if( !BST ){ BST = (BinTree)malloc(sizeof(struct TNode)); BST->Data=X; BST->Left=BST->Right=NULL; } else { if( X < BST->Data ) BST->Left = Insert( BST->Left, X ); /*递归插入左子树*/ else if( X > BST->Data ) BST->Right = Insert( BST->Right, X ); /*递归插入右子树*/ /* else X已经存在,什么都不做 */ } return BST; } BinTree Delete( BinTree BST, ElementType X ) { Position Tmp; if( !BST ) printf("Not Found "); else { if( X < BST->Data ) BST->Left = Delete( BST->Left, X ); /* 从左子树递归删除 */ else if( X > BST->Data ) BST->Right = Delete( BST->Right, X ); /* 从右子树递归删除 */ else { /* BST就是要删除的结点 */ /* 如果被删除结点有左右两个子结点 */ if( BST->Left && BST->Right ) { /* 从右子树中找最小的元素填充删除结点 */ Tmp = FindMin( BST->Right ); BST->Data = Tmp->Data; /* 从右子树中删除最小元素 */ BST->Right = Delete( BST->Right, BST->Data ); } else { /* 被删除结点有一个或无子结点 */ Tmp = BST; if( !BST->Left ) /* 只有右孩子或无子结点 */ BST = BST->Right; else /* 只有左孩子 */ BST = BST->Left; free( Tmp ); } } } return BST; } Position Find( BinTree BST, ElementType X ) { while(BST){ if( X < BST->Data ) BST=BST->Left; else if( X > BST->Data ) BST=BST->Right; else break; } return BST; } Position FindMin(BinTree BST) { if (BST) { while (BST->Left != NULL) { BST = BST->Left; } } return BST; } Position FindMax(BinTree BST) { if (BST) { while (BST->Right != NULL) { BST = BST->Right; } } return BST; }