题目1201:二叉排序树

点击打开链接

/*
	时间:2014.1.31
	目的:题目1201:二叉排序树 http://ac.jobdu.com/problem.php?pid=1201
*/ 
#include <stdio.h>
#include <malloc.h>
struct TreeNode{
    struct TreeNode *left;
    struct TreeNode *right;
    int data;
};
void First(TreeNode *p)//前序 
{
    if(p!=NULL)
    {
        printf("%d ",p->data);
        First(p->left);
        First(p->right);
    }
}
void Middle(TreeNode *p)//中序 
{
    if(p!=NULL)
    { 
        Middle(p->left);
        printf("%d ",p->data);
        Middle(p->right);
    }
}

void Last(TreeNode *p)//后序 
{
    if(p!=NULL)
    {
        Last(p->left);
        Last(p->right);
        printf("%d ",p->data);
    }
}
void createTree(TreeNode *pt,int n)//建树 
{
		int i, t;
        struct TreeNode *tp = pt;
        struct TreeNode *p ;
        scanf("%d", &(pt->data));
        pt->left = pt->right = NULL;
        for(i = 0;i < n - 1;i ++)
        {
        	tp = pt;
            p = (TreeNode*)malloc(sizeof(TreeNode));
            p->left = p->right = NULL;
            scanf("%d", &t);
            p->data = t;
            while(tp&&tp->data!= t)
            {
                if(tp->data > t)
                {
                    if(tp->left!=NULL)
                        tp=tp->left; 
                    else
                    {
                        tp->left = p;    
                        break;
                    }       
                }
                else if(tp->data < t)
                {
                    if(tp->right!=NULL)
                        tp=tp->right;    
                    else
                    {
                        tp->right = p;
                        break;
                    }   
                }   
            }
            
        }	
} 
int main()
{
    int n, i, t;
    while(~scanf("%d", &n))
    {
        struct TreeNode *pt = (TreeNode*)malloc(sizeof(TreeNode));
        struct TreeNode *tp;
		createTree(pt,n);
        tp = pt;
        First(tp);
        printf("\n");
        Middle(tp);
        printf("\n");
        Last(tp);
        printf("\n");
        free(pt);
    }
    return 0;
}
/*
-------------------
5				     思路:1.模拟 
1 6 5 9 8
1 6 5 9 8
1 5 6 8 9
5 8 9 6 1
-------------------
*/ 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值