두 갈래 나무 복습 및 일부 흔한 연습 문제
문제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 교육실험종합빌딩
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.