zoj 1700 || poj 1577 Falling Leaves(BST)

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=700

早知道这么简单我应该做快点的,事实上做了很久。

 输入是“不断去掉二叉树的叶子”

输出二叉树的前序遍历、

- -字符串的处理花了点时间。因为字母是有顺序的所以依次插进树里就行了。

2790645 2012-03-05 16:04:20 Accepted 1700 C++ 0 188 zisu_123


#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
using namespace std;
typedef struct node{
	node *p,*l,*r;
	char key;
}node;
node *head,*p,num[100];
char str[30];
void preorder(node* head)
{
	if(head==NULL) return;
	cout<<head->key;
	preorder(head->l);
	preorder(head->r);
}
int main()
{
	char ch1[30],ch2[30];
	void dfs(node* &head,int len);
	while(1)
	{
		int i=0;
		head=NULL;
		memset(str,'\0',sizeof(str));
		gets(ch1);
		memcpy(str,ch1,strlen(ch1));
		while(gets(ch2))
		{
			if(ch2[0]=='*'||ch2[0]=='$') break;
			strncat(ch2,str,strlen(str));
			memcpy(str,ch2,strlen(ch2));
			memset(ch2,'\0',sizeof(str));
		}
		
		for(i=0;i<strlen(str);i++)
			dfs(head,i);
		preorder(head);
		cout<<endl;
		if(ch2[0]=='$') break;
	}
	return 0;
}
void dfs(node* &head,int len)
{
	if(head==NULL)
	{
		head=(node*)malloc(sizeof(node));
		head->key=str[len];
		len++;
		head->l=head->r =NULL;
		return;
	}
	if(str[len]>head->key)
		dfs(head->r,len);
	if(str[len]<head->key)
		dfs(head->l,len);
}


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值