c语言:二叉排序树的操作

实现的功能:

------------------
1、建立二叉排序树
2、输出中序遍历结果
3、查找数据
0、退出
------------------

代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct BiNode{
    int  data;
    struct BiNode *lchild;
    struct BiNode *rchild;
}BiNode,*BiTree;
BiTree InsertBST(BiTree T,int e)//二叉树的插入
{
	BiTree s;
	if(!T)
    {
        s=(BiTree)malloc(sizeof(BiNode));
        s->data=e;
	    s->lchild=s->rchild=NULL;
	    T=s;
    }


	else if(e<T->data)
        T->lchild=InsertBST(T->lchild,e);

	else if(e>T->data)
		T->rchild=InsertBST(T->rchild,e);
    return T;
}



BiTree CreatBST(BiTree T)//建立二叉排序树
{
	int e,n,i;
	printf("输入数字的个数:");
    scanf("%d",&n);
    printf("请输入每个数字(空格隔开):");
	for(i=0;i<n;i++)
	{
        scanf("%d",&e);
		T=InsertBST(T,e);
	}
	return T;
}

void InOrder(BiTree T)
{//树的中序遍历
	if(T)
    {
        InOrder(T->lchild);
        printf("%d ",T->data);
        InOrder(T->rchild);
    }

}

int Search(BiTree T,int key)//查找
{
	BiTree p;
	int x=0;
	p=T;
	while(p)
	{
		if(key<p->data)
        {
            p=p->lchild;
            ++x;
        }

		else if(key>p->data)
        {
            p=p->rchild;
            ++x;
        }

		else
		{
			printf("数字%d查找成功。\n",key);
			printf("数字%d的查找长度为%d\n",key,x+1);
			return 1;
		}
	}
	printf("未找到数据%d。\n",key);
   // printf("数字%d的查找长度为%d\n",key,x+1);
	return 0;
}



int main()
{
	BiTree T=NULL;
	int n,key,selet;
	printf("------------------\n");
    printf("1、建立二叉排序树\n");
    printf("2、输出中序遍历结果\n");
    printf("3、查找数据\n");
    printf("0、退出\n");
    printf("------------------\n");
	while(1)
	{
        printf("\n");
        printf("请选择操作:");
        scanf("%d",&selet);
		switch(selet)
		{
			case 1:
				T=CreatBST(T);
				printf("二叉排序树建立成功!\n");
				break;
			case 2:
				printf("中序遍历结果为:");
				InOrder(T);
				putchar('\n');
				break;
			case 3:
				printf("请输入查找的关键字:");
				scanf("%d",&key);
				Search(T,key);
				break;
            case 0:
                exit(0);
		}
	}
}

结果演示:

c语言:二叉排序树的操作

 

上一篇:二叉树的实现-C语言


下一篇:数据结构-16.二叉树的先序中序后序遍历