编辑代码

#include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;

//有序二叉树(查询)
BiTree search(BiTree Node,int key)
{
	if(!Node)
	{
		Node= (BiTree)malloc(sizeof(BiTNode));
		Node->data=key;
		Node->lchild=Node->rchild=NULL;
	}
	else
	{
		if(key<Node->data)
		{
			Node->lchild=search(Node->lchild,key);
		}
		else if(key>Node->data)
		{
			Node->rchild=search(Node->rchild,key);
		}
	}
    return Node;
}


//有序二叉树(删除)
BiTree Del(BiTree Node)
{
	/*如果结点为叶子结点则直接删除*/
	if(Node->lchild==NULL&&Node->rchild==NULL)
	{
		free(Node);
		return NULL;
	}
	/*如果结点左子树不存在只有右子树*/
	else if(Node->lchild==NULL)
	{
		free(Node);
		return Node->rchild;
	}
	/*如果结点右子树不存在只有左子树*/
	else if(Node->rchild==NULL)
	{
		free(Node);
		return Node->lchild;	
	}
	/*如果结点左右子树都存在*/
	else
	{
		BiTree	p=Node,q=Node->lchild;
		while(q->rchild)
		{
			p=q;
			q=q->rchild;
		}
		Node->data=q->data;
		/*左结点为叶子结点*/
		if(Node==p)
		{
			p->lchild=q->lchild;
		}
		/*左结点不为叶子结点*/
		else
		{
			p->rchild=q->lchild;
		}
		free(q);
		return Node;
	}
}


BiTree Delete(BiTree Node,int key)
{
	if(!Node)
	{
		Node=NULL;
	}
	else
	{
		if(key<Node->data)
		{
			Node->lchild=Delete(Node->lchild,key);
		}
		else if(key>Node->data)
		{
			Node->rchild=Delete(Node->rchild,key);
		}
		else if(key==Node->data)
		{
			Node=Del(Node);
		}
		return Node;
	}
}

//有序二叉树(遍历)
void see(BiTree Node)
{
	if(!Node)
	{
		return;
	}
	else
	{
        see(Node->lchild);
		printf("%d ",Node->data);
		see(Node->rchild);
	}
}


void main()
{
	int array[10]={62,88,58,47,35,73,51,99,37,93};
    BiTree T=NULL;
    for(int i=0;i<10;i++)
    {
        T=search(T,array[i]);
    }
    see(T);
    printf("\n");
    Delete(T,99);
    see(T);
}