typedef struct TreeNode *BinTree; typedef BinTree Position; struct TreeNode{ ElementType Data; BinTree Left; BinTree Right; }; BinTree 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);//递归插入右子树 //else X已经存在,什么都不做 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; }
新闻热点
疑难解答