주어진 이 진 트 리 가 이 진 트 리 인지 여 부 를 결정 합 니 다.

1912 단어 데이터 구조
주어진 이 진 트 리 가 이 진 트 리 인지 아 닌 지 를 판단 하 는 프로그램 을 작성 합 니 다. 이 이 진 트 리 를 이 진 트 리 로 저장 구 조 를 만 들 고 결점 의 키 워드 는 모두 다 릅 니 다.
 
입력
이 진 트 리 의 우선 순 서 를 입력 하 십시오. 만약 에 특정한 노드 에 왼쪽 아이 (오른쪽 아이) 가 없 으 면 왼쪽 아이 (오른쪽 아이) 는 0 으로 표시 합 니 다.
 
출력
이 진 트 리 의 중간 순 서 를 출력 하고 이 이 진 트 리 가 이 진 트 리 인지 여 부 를 판단 합 니 다. 만약 에 'it' 를 출력 합 니 다. is an Binary OrderTree! ", 그렇지 않 으 면 출력" It is not an BinaryOrderTree!”
 
입력 샘플
5 3 2 0 0 4 0 0 7 6 0 0 8 0 0
 
출력 샘플
2 3 4 5 6 7 8 It is an BinaryOrderTree!
 
제시 하 다.
중간 순서 로 두 갈래 정렬 트 리 를 옮 겨 다 니 면 키워드 의 오름차 순 서 를 얻 을 수 있 습 니 다. 이 를 판정 근거 로 할 수 있 습 니 다.
 
#include 
#include 
#include 
using namespace std;

typedef struct node{
	int info;
	node* lchild;
	node* rchild;
}node,*Pnode;

Pnode creat(){//        
	Pnode p;
	int num;
	cin>>num;
	if(num==0) p=NULL;
	else{
		p=(Pnode)malloc(sizeof(node));
		p->info=num;
		p->lchild=creat();
		p->rchild=creat();
	}
	return p;
} 

void output(Pnode t){//        
	if(t){
		output(t->lchild);
		cout<info<rchild);	
	}
}

int  isBinaryTree(Pnode t){//          
	if(t){
		if(t->lchild==NULL&&t->rchild==NULL) return 1; //       ,  1 
		else if(t->lchild==NULL)  {
			if(t->inforchild->info) return isBinaryTree(t->rchild);
			else return 0;
		}//     ,      
		else if(t->rchild==NULL)  {
			if(t->info>t->lchild->info) return isBinaryTree(t->lchild);
			else return 0;
		}//     ,      
		else{
			if(t->info>t->lchild->info&&t->inforchild->info)
			return isBinaryTree(t->rchild)&&isBinaryTree(t->lchild);
			else return 0;
		}//       
	}	
}

int main(){
	Pnode p=creat();
	output(p);
	if(isBinaryTree(p)) cout<

좋은 웹페이지 즐겨찾기