두 갈래 나무 만들기 (순서)

2375 단어 나무.

두 갈래 나무를 세우다


두 갈래 트리를 구축하면 입력한 줄의 선순, 중순 또는 후순에 따라 구축할 수 있다. 예를 들어 본 편에서 124-1-13-135-1-1을 예로 들면 숫자-1은 공결점으로 선순, 중순, 후순은 큰 차이가 없다. 단지 결점 데이터에 값을 부여하는 시간이 다르기 때문에 귀속 사상을 구축하고 운용한다.반복은 선, 중, 후순이 될 수도 있고, 층층이 반복할 수도 있다.층차적으로 대열을 운용하여 팝마다 하나의 데이터를 출력하고push는 상응하는 좌우 아이에게 들어간다.이 편에서 나의 대기열에 사용되는 stl 템플릿은 대기열에 모든 결점 지침을 저장하는데 개인적으로 이렇게 하면 더욱 간단하고 이해하기 쉽다고 생각한다.
끝점 생성하기
#include
#include
#include
#include
using namespace std;//1 2 4 -1 -1 -1 3 5 -1 -1 -1
int cout=0;
typedef struct node{
	int data;
	struct node *leftchild;
	struct node *rightchild;
}Tree,*Btree;


먼저 두 갈래 나무를 세우다
int createtree(node* &root)// , -1   
{
	int x;
	scanf("%d",&x);
	if(x==-1){
		root=NULL;
	}
	else{
		root=(node*)malloc(sizeof(node));
		root->data=x;cout++;
		createtree(root->leftchild);
		createtree(root->rightchild);//cout++;
	}
return cout;// cout  
}

반복:
void firstfind(node* &root)//  
{
	if(root)
	{
		printf("%4d",root->data);
		firstfind(root->leftchild);
		firstfind(root->rightchild); 
	}
}
void middlefind(node* &root)//  
{
	if(root)
	{
		
		middlefind(root->leftchild);printf("%4d",root->data);
		middlefind(root->rightchild); 
	}
}
void lastfind(node* &root)//  
{
	if(root)
	{
		
		lastfind(root->leftchild);
		lastfind(root->rightchild); printf("%4d",root->data);
	}
}
void everyfind(node* &root)// (stl , , , ) 
{
	queueq;
	q.push(root);
	while(!q.empty())
	{
		printf("%4d",q.front()->data);
		if(q.front()->leftchild)q.push(q.front()->leftchild);
		if(q.front()->rightchild)q.push(q.front()->rightchild);
		q.pop();//pop  
	}
}

주 함수:
int main()
{

	Btree root; 
	createtree(root);
	printf(" :
"); firstfind(root); printf("
"); printf(" :
"); middlefind(root); printf("
"); printf(" :
"); lastfind(root); printf("
"); printf(" :
"); everyfind(root); printf("
"); printf(" %d
",cout); return 0; }

주의: 매번 전송된 루트는 주소를 찾아야 합니다 & *가 아니라 주소를 전송하면 바늘에 상응하는 데이터를 직접 바꿀 수 있습니다. 이 작은 문제로 인해 불필요한 시간을 많이 들여서 검사했습니다.

좋은 웹페이지 즐겨찾기