이 진 트 리 사전 트 리

1946 단어 데이터 구조
문 제 를 보 니 사전 트 리 를 써 서 정렬 해 야 하 는데 26 글자 에 국한 되 지 않 아서 세 갈래 사전 트 리 (이 진 트 리 세트 사전 트 리) 가 왔 습 니 다.최 악의 시간 복잡 도 는 trie 나무의 상수 배 이 고 공간 은 trie 나무 보다 훨씬 절약 된다.
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef struct Node
{
	char ch;
	int count;
	Node *lson, *rson, *subtree;
}Node ,*Nodelink;

Nodelink create(char ch)
{
	Nodelink p = new Node;
	p->ch = ch;
	p->lson = NULL;
	p->rson = NULL;
	p->subtree = NULL;
	p->count = 0;
	return p;
}
Nodelink root = create('\0');
void insert(char str[])
{
	int i;
	Nodelink p = root;
	for(i = 0; i < strlen(str); i++)
	{
               if(p->subtree == NULL)p->subtree = create('str[i]');
		p = p->subtree;
		while(p->ch != str[i])
		{
			if(str[i] < p->ch)
			{
				if(p->lson == NULL)p->lson = create(str[i]);
				p = p->lson;
			}
			else 
			{
				if(p->rson == NULL)p->rson = create(str[i]);
				p = p->rson;
			}
		}
		
	}
	p->count ++;
}
char pp[44];
void dfs(int top, Nodelink p)
{
	int i;
	if(p->lson != NULL)
		dfs(top, p->lson);
        pp[top] = p->ch;
        for(i = 0; i < p->count; i++)
	{
		pp[top + 1] = '\0';
		printf("%s
", pp); } if(p->subtree != NULL) dfs(top + 1, p->subtree); if(p->rson != NULL) dfs(top, p->rson); } Nodelink destroy(Nodelink p) { if(p->lson != NULL) p->lson = destroy(p->lson); if(p->subtree != NULL) p->subtree = destroy(p->subtree); if(p->rson != NULL) p->rson = destroy(p->rson); delete p; return NULL; } int main() { char str[33]; freopen("test.in", "r", stdin); while(~scanf("%s", str)) { insert(str); } dfs(0, root); destroy(root); return 0; }

좋은 웹페이지 즐겨찾기