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);
}

 

你可能感兴趣的:(c,struct,null)