두 갈래 나무 복습 및 일부 흔한 연습 문제

5422 단어
오늘 두 갈래 나무의 체인식 저장 구조를 복습하였으며, 이전에 소홀히 했던 일부 세부 문제를 발견하였으며, 지금 총괄하여 다음과 같이 정리하였다.
문제1: 문자열 값 부여 함수에서 전역 변수를 초기화하지 않아 오류가 발생했습니다. 전역 변수에 대한 이해가 깊지 않고 오류 코드와 수정은 다음과 같습니다.
Status StringAssign(String S,char * chars){
    int index=1;/*2016-05-11  , */
    if(strlen(chars)>MAXSIZE)
       return ERROR;
    else{
        S[0]=strlen(chars);
        for(index=1;index<=S[0];index++)
            S[index]=*(chars+index-1);
    }
}

문제2: 귀속으로 두 갈래 나무의 깊이를 구할 때 if(T->Lchild)를 다 쓴 후에else를 쓰지 않아 프로그램이 오류가 발생했습니다. 귀속에 대한 이해가 부족하고 연습을 많이 해야 한다는 것을 설명합니다. 다음과 같이 고쳐야 합니다.
Status DepthBiTree(BiTree T){
    int left=0,right=0;
    if(!T)
       return 0;
    else{
        if(T->Lchild)
            left=DepthBiTree(T->Lchild);
        else
            left=0;
        if(T->Rchild)
            right=DepthBiTree(T->Rchild);
        else
            right=0;
    }
    return left>right? left+1:right+1;/* */
}

다음은 일부 연습 문제를 기록합니다.
Q1: 두 갈래 트리 T를 정하고 그 모든 노드의 개수를 계산한다. A: 두 갈래 트리의 개수를 계산하는 문제에 대해 귀속을 우선적으로 고려한다. 본 문제 코드는 다음과 같다.
Status NodesNum(BiTree T){
    if(!T)/* 0*/
       return 0;
    else{
        return (NodesNum(T->Lchild)+NodesNum(T->Rchild)+1);/* + + */
    }
}

Q2: 두 갈래 나무 T를 정하고 그 모든 잎 노드를 인쇄한다. 일반적인 방법은 두 갈래 나무의 각 노드가 잎 노드인지 아닌지를 판단하는 것이다. 그렇지 않으면 계속 뒤로 판단한다.비교적 복잡하지만 귀속을 사용하면 쉽게 해결할 수 있다. 코드는 다음과 같다.
Status PrintLeaves(BiTree T){
    if(!T)/* */
      return ERROR;
    else{
        if(!T->Lchild&&!T->Rchild)/* , , */
           Visit(T->data);
        else/* , */
           PrintLeaves(T->Lchild);
           PrintLeaves(T->Rchild);
    }
}

Q3: 두 갈래 나무 T를 정하고 잎사귀 노드의 개수를 구한다. A: 여전히 귀속을 사용하고 두 변수 NumL, NumR을 성명한다. 좌우 자나무의 잎사귀 노드 개수를 대표한다. 코드는 다음과 같다.
    int numL,numR;
    if(!T)/* 0*/
       return 0;
    else{/* */
        /* , , 1*/
        if(!T->Lchild&&!T->Rchild)
            return 1;
        /* , numL,numR, */
        else{
            numL=LeaveNum(T->Lchild);
            numR=LeaveNum(T->Rchild);
            return (numL+numR);
        }
    }
}

귀속은 두 갈래 나무 관련 문제를 해결하는 데 흔히 볼 수 있는 방법으로 더욱 연습하여 능숙하게 응용할 수 있도록 해야 한다.
2015-05-11 교육실험종합빌딩

좋은 웹페이지 즐겨찾기