먼저 두 갈래 트리를 만들고 나중에 두 갈래 트리를 계속 출력합니다

먼저 두 갈래 트리를 만들고 나중에 두 갈래 트리를 계속 출력합니다


가령 선행 반복: abcdefghi (루트 좌우) 중 반복: bcaedghfi (왼쪽 루트 오른쪽)
  • 우선 선착순 역행에서 a가 루트 노드임을 확인할 수 있다
  • 중속 반복에서 bc(초기 위치는 b(길이 2))가 a인 왼쪽 트리 edghfi(초기 위치는 e 길이는 6)가 a인 오른쪽 트리를 볼 수 있다
  • 동시에 앞순서 서열에서 a좌자수의 초기 위치는 b(길이 2)이고 우자수의 초기 위치는 e길이가 6이라는 것을 주의한다
  • a를 구하는 왼쪽 트리의 전부, a를 구하는 오른쪽 트리를 차례로 호출한다
  • #include
    #include
    typedef struct node{
    	char data;
        struct node *lchild,*rchild;
    }node,*tree;
    tree creat(char *a,char *b,int n)
    {
    	tree t;
    	//char a[0]=a;
    	int i=0,len;
    	if(n<=0) return;
    	 t=(tree)malloc(sizeof(node));
    	 t->data=a[0];
    	 while(b[i]!=a[0])
    	 {
    	 	i++;
    	 
    	 	
    	 }
    	 len=n-i-1;
    	 t->lchild=creat(a+1,b,i);
    	 t->rchild=creat(a+i+1,b+i+1,len);
    	 printf("%c",t->data);
    	 return t;
    	
    	
    	
    }
    int main()
    {
    	char a[20],b[20];
    	tree t;
    		int n;
    		printf(" /n");
    		n=scanf("%d",&n);
    	printf(" /n");
    	scanf("%s",a);
    	printf(" /n");
    	scanf("%s",b);
    	creat(a,b,n);
    	return 0;
    	
     } 
    

    좋은 웹페이지 즐겨찾기