#include聽
#include聽
#include聽/*聽定义结构体聽*/
typedef聽聽int聽TypeData;
typedef聽struct聽stBiTreeNode聽
{
聽聽聽聽TypeData聽data;
聽聽聽聽struct聽stBiTreeNode聽*lchild,聽*rchild;
}BITREENODE;/*聽
*聽函数功能:判断要插入的数据是否存在聽
*聽函数参数:root聽根节点
聽聽聽聽聽聽聽聽聽聽聽聽data聽要查询的数据
聽聽聽聽聽聽聽聽聽聽聽聽lastNode聽如果没有找到,则返回查找最后一个节点
*聽返回值:聽0聽存在聽1聽不存在聽2聽树是空树
*/int聽isDataAlreadyExist(BITREENODE*聽root,聽TypeData聽data,BITREENODE**聽lastNode)
{
聽聽聽聽BITREENODE*聽temp聽=聽root;
聽聽聽聽/*聽如果根节点是空的,则直接返回聽*/
聽聽聽聽if(!temp)
聽聽聽聽{
聽聽聽聽聽聽聽聽return聽2;
聽聽聽聽}
聽聽聽聽while(1)
聽聽聽聽{
聽聽聽聽聽聽聽聽/*聽如果存在直接返回聽*/
聽聽聽聽聽聽聽聽if(temp->data聽==聽data)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽return聽0;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽if(temp->data聽rchild聽==聽NULL)
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽/*聽把最后一个节点的地址返回出去聽*/
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽(*lastNode)聽=聽temp;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽1;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽temp聽=聽temp->rchild;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽if(temp->lchild聽==聽NULL)
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽/*聽把最后一个节点的地址返回出去聽*/
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽(*lastNode)聽=聽temp;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽1;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽temp聽=聽temp->lchild;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
}/*聽在二叉排序树中插入数据聽*/BITREENODE*聽createSortBiTree(BITREENODE*聽root,TypeData聽data)
{
聽聽聽聽int聽ret聽=聽0;
聽聽聽聽BITREENODE*聽pLastNode聽=聽NULL;
聽聽聽聽/*聽判断要插入的数据是否存在聽*/
聽聽聽聽ret聽=聽isDataAlreadyExist(root,data,&pLastNode);
聽聽聽聽/*聽如果已经存在了聽*/
聽聽聽聽if(ret聽==聽0)
聽聽聽聽{
聽聽聽聽聽聽聽聽return聽root;
聽聽聽聽}
聽聽聽聽/*聽如果没有找到,就把这个插入聽*/
聽聽聽聽if(ret聽==聽1)
聽聽聽聽{
聽聽聽聽聽聽聽聽BITREENODE*聽pNewNode聽=聽(BITREENODE*)malloc(sizeof(BITREENODE));
聽聽聽聽聽聽聽聽pNewNode->data聽=聽data;
聽聽聽聽聽聽聽聽pNewNode->lchild聽=聽pNewNode->rchild聽=聽NULL;
聽聽聽聽聽聽聽聽/*聽插入到右孩子聽*/
聽聽聽聽聽聽聽聽if(pLastNode->data聽rchild聽=聽pNewNode;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽/*聽插入到左孩子聽*/
聽聽聽聽聽聽聽聽else聽if(pLastNode->data聽>聽data)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽pLastNode->lchild聽=聽pNewNode;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽/*聽根节点是空的,则新建一个根节点*/
聽聽聽聽if(ret聽==聽2)
聽聽聽聽{
聽聽聽聽聽聽聽聽BITREENODE*聽pNewNode聽=聽(BITREENODE*)malloc(sizeof(BITREENODE));
聽聽聽聽聽聽聽聽pNewNode->data聽=聽data;
聽聽聽聽聽聽聽聽pNewNode->lchild聽=聽pNewNode->rchild聽=聽NULL;
聽聽聽聽聽聽聽聽root聽=聽pNewNode;
聽聽聽聽}
聽聽聽聽return聽root;
}/*聽中序遍历该二叉排序树聽*/int聽inOrderBiTree(BITREENODE*聽root)
{
聽聽聽聽if(root)
聽聽聽聽{聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽inOrderBiTree(root->lchild);
聽聽聽聽聽聽聽聽printf("%d聽",root->data);
聽聽聽聽聽聽聽聽inOrderBiTree(root->rchild);
聽聽聽聽}
聽聽聽聽return聽0;
}
int聽main()
{
聽聽聽聽BITREENODE*聽root聽=聽NULL;
聽聽聽聽/*聽在二叉排序树种插入数据聽*/
聽聽聽聽root聽=聽createSortBiTree(root,20);
聽聽聽聽root聽=聽createSortBiTree(root,30);
聽聽聽聽root聽=聽createSortBiTree(root,10);
聽聽聽聽root聽=聽createSortBiTree(root,25);
聽聽聽聽inOrderBiTree(root);
聽聽聽聽printf("\n");
聽聽聽聽return聽0;
} |