创建:
TreeNode* buildtree(){
int x;cin>>x;
if(x==0)return nullptr;
TreeNode* T=new TreeNode(x);
T->left=buildtree();
T->right=buildtree();
return T;
}
普通删除(参考代码随想录):
int t;//判断是否找到结点
TreeNode* Remove(TreeNode* root,int m){
if(!root){
return nullptr;
}
if(root->val==m){
t=1;
if(!root->right){
return root->left;
}
TreeNode* T=root->right;
while(T->left){
T=T->left;
}
swap(root->val,T->val);
}
root->left=Remove(root->left,m);
root->right=Remove(root->right,m);
return root;
}
搜索树删除:
BinTree Delete( BinTree BST, ElementType X ){
if(!BST)printf("Not Found\n");
else{
if(BST->Data==X){
if(!BST->Left&&!BST->Right)return NULL;
else if(!BST->Right&&BST->Left)return BST->Left;//可以不用else
else if(!BST->Left&&BST->Right)return BST->Right;//
else{//
BinTree T=FindMin(BST->Right);
BST->Data=T->Data;
BST->Right=Delete(BST->Right,T->Data);
}
}
else if(BST->Data>X)BST->Left=Delete(BST->Left,X);//一定要加else
else if(BST->Data<X)BST->Right=Delete(BST->Right,X);//
}
return BST;
}