데이터 구조 (9)

2500 단어 데이터 구조
나무 같은 이 진 트 리 검색 여부 (25) 분 하 다
삽입 시퀀스 를 지정 하면 두 갈래 검색 트 리 를 유일 하 게 확인 할 수 있 습 니 다.그러나 주어진 두 갈래 검색 트 리 는 다양한 삽입 서열 로 구 할 수 있다.예 를 들 어 각각 시퀀스 {2, 1, 3} 과 {2, 3, 1} 에 비 어 있 는 이 진 트 리 를 삽입 하면 같은 결 과 를 얻 을 수 있 습 니 다.따라서 입력 한 각종 삽입 시퀀스 에 대해 서 는 같은 두 갈래 검색 트 리 를 만 들 수 있 는 지 판단 해 야 합 니 다.
입력 형식:
몇 개의 그룹 테스트 데 이 터 를 포함 하 는 지 입력 하 십시오.각 조 데이터 의 첫 줄 에 두 개의 정수 N 을 드 립 니 다. (≤ 10) 과 L 은 각각 각 서열 에 요소 가 삽 입 된 개수 와 검사 가 필요 한 서열 개수 이다.두 번 째 줄 은 빈 칸 으로 구 분 된 정수 N 개 를 초기 삽입 시퀀스 로 보 여 줍 니 다.마지막 으로 L 줄 은 줄 마다 N 개의 삽 입 된 요 소 를 보 여 주 며 L 개의 검사 가 필요 한 시퀀스 에 속 합 니 다.
간단하게 말하자면, 우 리 는 모든 삽입 서열 이 1 에서 N 까지 의 배열 이 라 고 보장 한다.N 이 0 일 때 표지 입력 이 끝 났 습 니 다. 이 데 이 터 는 처리 하지 마 십시오.
출력 형식:
각 그룹 에 검사 해 야 할 시퀀스 입 니 다. 생 성 된 이 진 검색 트 리 가 초기 시퀀스 와 같 으 면 "Yes" 를 출력 합 니 다. 그렇지 않 으 면 "No" 를 출력 합 니 다.
입력 예시:
4 2
3 1 4 2
3 4 1 2
3 2 4 1
2 1
2 1
1 2
0

출력 예시:
Yes
No
No
#include "stdio.h"      
#include "stdlib.h"  
  
//        
typedef struct TreeNode *Tree;  
struct TreeNode{  
    int v;  
    Tree Left,Right;  
};  
  
//       
Tree MakeTree(int N);  
//         
Tree Insert(Tree &T,int V);  
//       
Tree NewNode(int V);  
//           
int Judge(Tree T,Tree TT);  
//     
void FreeTree(Tree T);  
  
int main()  
{  
    int N,L,i;  
    Tree T;  
  
    scanf("%d",&N);  
    while(N){  
        scanf("%d",&L);  
        T=MakeTree(N);  
        for(i=0;iT->v)  
            T->Right=Insert(T->Right,V);  
        else  
            T->Left=Insert(T->Left,V);  
    }  
    return T;  
};  
  
//       
Tree NewNode(int V){  
    Tree T=(Tree)malloc(sizeof(struct TreeNode));  
    T->v=V;  
    T->Left=T->Right=NULL;  
    return T;  
};  
  
  
//           
int Judge(Tree T,Tree TT){  
    if((T==NULL)&&(TT==NULL))return 1;  
    else if(((T==NULL)&&(TT!=NULL))||((T!=NULL)&&(TT==NULL))) return 0;//              
    else if((T!=NULL)&&(TT!=NULL)&&(T->v!=TT->v)) return 0;//           
    else return (Judge(T->Left,TT->Left)&&Judge(T->Right,TT->Right));  
  
};  
  
//     
void FreeTree(Tree T){  
    if(T->Left) FreeTree(T->Left);  
    if(T->Right) FreeTree(T->Right);  
    free(T);  
};  

좋은 웹페이지 즐겨찾기