1. 二叉排序树的构建及其遍历

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define NULLNODE NULL
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
const int N = 200;

typedef double ElemType ;
typedef int Status ;

typedef struct TNode
{
    ElemType elem;
    struct TNode *left;
    struct TNode* right;
}BTNode, *BTree;

BTree creatBTree();
void InOrderTraverse(BTree T);
Status SearchBST(BTree T, ElemType e, BTree f, BTree *p);
Status InsertBST(BTree *T, ElemType e);
int main(void)
{

	BTNode *p = NULL;
	int n, i;
	scanf("%d", &n);
	if(n == 0)
	{
		printf("error");
		return 0;
	}
	//printf("%d ", n);
	for(i =1; i<= n; i++)
	{
		ElemType e;
		scanf("%lf", &e);
	//	printf("%d", e);
		InsertBST(&p, e);
	 }

    InOrderTraverse(p);

    return 0;
}

Status SearchBST(BTree T, ElemType e, BTree f, BTree *p)
{
    if(!T)
    {
        *p = f;
        return FALSE;
    }
    if( e == T->elem)
    {
        *p = T;
        return TRUE;
    }
    else if(e < T->elem)
    {
        return SearchBST(T->left, e, T, p);
    }
    else return SearchBST(T->right, e, T, p);
}
Status InsertBST(BTree *T, ElemType e)
{

	BTNode * s = (BTree) malloc(sizeof(BTNode));
	if(!s)
	{
		exit(OVERFLOW);
	}
    s->elem = e;
    s->left = NULL;
    s->right = NULL;

	if(*T == NULL)
	{
		*T = s;
		return TRUE;
	}
    BTNode *p;

    if(!SearchBST(*T, e, NULL, &p))
    {
        if(e < p->elem)
        {
            p->left = s;
        }
        else
        {
            p->right = s;
        }
        return TRUE;
    }
    return FALSE;
}

void InOrderTraverse(BTree T)
{
     if(T == NULL) return;

        InOrderTraverse(T->left);
         printf("%g ", T->elem);
        InOrderTraverse(T->right);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值