이 진 트 리 구축, 옮 겨 다 니 기 (앞 순서, 중간 순서, 뒤 순서), 잎 노드 의 개 수 를 구하 고 노드 의 개 수 를 구하 십시오.

이 진 트 리 는 필기시험 에서 시험 이 가장 빈번 한 데이터 구조 중 하나 로 프로그램 이 이 진 트 리 를 만 들 고 세 가지 순서 로 이 진 트 리 를 옮 겨 다 니 며 잎 노드 의 수 를 되 돌려 이 진 트 리 노드 의 총 수 를 구 하 는 등 을 포함한다.이 진 트 리 노드 의 데이터 구 조 를 만 듭 니 다.
typedef struct Node {int data;struct Node *left,*right; }Node;,구조 체 내 에는 데이터, 왼쪽 나무, 그리고 나무 가 포함 되 어 있다.
1. 이 진 트 리 를 만 드 는 프로그램 코드 는 다음 과 같 습 니 다.
Node *CreatBTree() //     
{
	Node *t;
	int x;
	scanf("%d",&x);
	if(x==0)
	{
		t=NULL;
	}
	else
	{
		t=(Node*)malloc(sizeof(Node));
		t->data=x;
		printf("
%d :",t->data ); t->left=CreatBTree(); printf("
%d :",t->data ); t->right=CreatBTree(); } return t; }

2. 앞 순 서 는 이 진 트 리 를 옮 겨 다 닌 다.
void preVisit(Node *T)
{
	if(T==NULL) return;
	else
	{
		printf("%3d",T->data);
		preVisit(T->left);
		preVisit(T->right);
	}
}

3. 중 서 는 이 진 트 리 를 옮 겨 다 닌 다.
void middVisit(Node *T)
{
	if(T==NULL) return;
	else
	{
		middVisit(T->left);
		printf("%3d",T->data);
		middVisit(T->right);
	}
}

4. 뒤 순 서 는 이 진 트 리 를 옮 겨 다 닌 다.
void lastVisit(Node *T)
{
	if(T==NULL) return;
	else
	{
		lastVisit(T->left);
		lastVisit(T->right);
		printf("%3d",T->data);
	}
}
5. 잎 노드 의 수 를 되 돌려 줍 니 다.
int leafnum(Node *T)
{
	if (!T)
	{
		return 0;
	}
	else if ((!T->left)&&(!T->right))
	{
		return 1;
	}
	else
	{
		return ((leafnum(T->left)+leafnum(T->right)));
	}
}

6. 반환 노드 총 수량
int Nodenum(Node *T)
{
	if (T)
	{
		return 1+Nodenum(T->left)+Nodenum(T->right);
	}
	if (T==NULL)
	{
		return 0;
	}

}

7. 테스트 프로그램;
int menu();
void main()
{
	Node *T=NULL;
	int choice;
	do{
		choice=menu();
		if(choice==1)
		{
			printf("      ,   “0”    :!
"); printf(" :
"); T=CreatBTree(); printf(" "); } else if(choice==2) { printf(" :
"); preVisit(T); } else if(choice==3) { printf(" :
"); middVisit(T); } else if(choice==4) { printf(" :
"); lastVisit(T); } else if(choice==5) { int ct=10; ct=leafnum(T); printf(" :
"); printf("%d
",ct); } else if(choice==7) { int count=Nodenum(T); printf(" %d 。
",count); } else if(choice==8) exit(0); }while(choice<=8); }
int menu()
{
    	int choice;
		printf("
"); printf("
"); printf(" ***************************
"); printf(" * *
"); printf(" * *
"); printf(" * 1 *
"); printf(" * 2 *
"); printf(" * 3 *
"); printf(" * 4 *
"); printf(" * 5 *
"); printf(" * 7 *
"); printf(" * 8 *
"); printf(" ****************************
"); printf(" (1,2,3,4,5,6,7,8):
"); scanf("%d",&choice); return choice; }

좋은 웹페이지 즐겨찾기