두 갈래 나무가 두루 다니다(중서+선서,중서+후서)

2033 단어
선순과 중순은 후순을 구할 수 있다는 것을 안다
후순과 중순을 알면 중순을 구할 수 있고,
하지만 중서를 알아야 다른 걸 구할 수 있어요.
세 가지 역력의 특징: 이 세 가지 역력의 특징은 먼저 서열이 뿌리 노드를 먼저 역력하는 것이다. 그래서 그의 서열의 첫 번째는 전체 두 갈래 나무의 뿌리 노드이다. 반대로 뒷 서열이 역력하는 서열의 마지막 하나는 두 갈래 나무의 뿌리 노드이다. 두 갈래 나무의 뿌리 노드를 단점을 통해 중서 서열에서 이 뿌리 노드를 찾아낸다. 왜냐하면 중서 서열은 왼쪽 글자를 먼저 역력한 다음에 뿌리 노드를 역력하고 그 다음은 오른쪽 서브 나무이기 때문이다.그래서 중서 서열 중의 뿌리 노드 왼쪽의 노드는 모두 왼쪽 나무이고 오른쪽의 서열은 모두 오른쪽 나무이어야 한다. 이어서 귀속적인 응용을 하면 전체 두 갈래 나무를 얻을 수 있다.
#include
#include
#include
#include
typedef struct node
{
    char data;
    struct node *lchild;
    struct node *rchild;
}BiNode,*BTree;
void getpre(char *last,char *mid,BTree &T,int len)
{
    if(len==0)
    {
        T=NULL;
        return;
    }
    char ch=last[len-1];
    int index=0;
    while(mid[index]!=ch)
    {
        index++;
    }
    T=(BTree)malloc(sizeof(BiNode));
    T->data=mid[index];
    getpre(last,mid,T->lchild,index);
    getpre(last+index,mid+index+1,T->rchild,len-index-1);
}
//void getpost(char *prim,char *mid,BTree &T,int len)
//{
//    if(len==0)
//    {
//        T=NULL;
//        return;
//    }
//    char ch=prim[0];
//    int index=0;
//    while(mid[index]!=ch)
//    {
//        index++;
//    }
//    T=(BTree)malloc(sizeof(BiNode));
//    T->data=mid[index];
//    getpost(prim+1,mid,T->lchild,index);
//    getpost(prim+1+index,mid+index+1,T->rchild,len-1-index);
//}
void pre(BTree T)
{
    if(T!=NULL)
    {  printf("%c",T->data);
        pre(T->lchild);
        pre(T->rchild);

    }
}
//void post(BTree T)
//{
//    if(T!=NULL)
//    {
//        post(T->lchild);
//        post(T->rchild);
//        printf("%c",T->data);
//    }
//}
int main()
{
    char first[36];
    char mid[36];
    char last[36];
    while(scanf("%s%s",last,mid)!=EOF)
    {
        BTree T=NULL;
        getpre(last,mid,T,strlen(last));
        pre(T);
        printf("
"); } }

좋은 웹페이지 즐겨찾기