두 갈래 나무가 두 갈래 검색 나무인지 아닌지를 판단하는 세 가지 방법
2403 단어 두 갈래 나무
두 갈래 나무가 두 갈래 검색 나무인지 아닌지를 판단하는 세 가지 방법
두 갈래 검색 트리 성질: 1.왼쪽 트리의 노드 값 2.오른쪽 하위 트리의 노드 값 > 루트 포인트 값; 3.두 갈래 검색 트리의 중차순 반복 시퀀스는 단조로운 증가 시퀀스로 상기 성질에 따라 다음과 같은 방법을 요약할 수 있다.
방법1: 만약에 왼쪽 트리 노드의 최대값 방법2: 중간 순서로 두 갈래 나무를 훑어보고 훑어보는 결과 서열이 단조롭게 증가하면 반드시 두 갈래로 나무를 검색한다
메서드 1 코드는 다음과 같습니다.
두 갈래 트리 정의:struct BiNode
{
int dada;
BiNode *lchild;
BiNode *rchild;
};
반복 최대값 찾기:int Find_max(BiNode *root)///
{
int maxm=root->data;
if(root->lchild!=NULL)
{
int maxleft=Find_max(root->lchild);
maxm=max(maxm,maxleft);
}
if(root->rchild!=NULL)
{
int maxright=Find_max(root->rchild);
maxm=max(maxm,maxright);
}
return maxm;
}
반복 최소값 찾기:int Find_min(BiNode *root)///
{
int minn=root->data;
if(root->lchild!=NULL)
{
int minleft=Find_min(root->lchild);
minn=min(minn,minleft);
}
if(root->rchild!=NULL)
{
int minright=Find_min(root->rchild);
minn=min(minn,minnright);
}
return minn;
}
판단 함수:int ISBST(BiNode *root)
{
if(root==NULL)
return 1;
if(root->lchild!=NULL && Find_max(root->lchild) > root->data)/// , return
return 0;
if(root->rchild!=NULL && Find_min(root->rchild) < root->data)/// , return
return 0;
if(ISBST(root->lchild) && ISBST(root->rchild))///
return 1;
}
방법 2:
두 갈래 나무의 중차 역행 결과를 수조에 저장하고 수조의 원소가 단조롭게 증가하는지 판단하면 된다void inorder(BiNode *root)
{
if(root==NULL)
return;
if(root->lchild!=NULL)
inorder(root->lchild);
temp[k++]=root->data;
if(root->rchild!=NULL)
inorder(root->rchild);
}
void ISBST()
{
int flag=0;
for(int i=1; i
방법3: 방법2의 개선: 개척수조가 공간의 복잡도를 차지하기 때문에 선구 노드를 설정하고 매번 선구 노드와 비교하기만 하면 된다int ISBST(BiNode *root)
{
BiNode *pre;
if(root!=NULL)
{
if(!ISBST(root->lchild))
return 0;
if(pre!=NULL && root->data data)
return 0;
pre=root;
if(!ISBST(root->rchild))
return 0;
}
return 1;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 데이터 구조 2차원 트리의 실현 코드
일.두 갈래 트리 인터페이스
2 노드 클래스 3.
두 갈래 나무 구현 이 글을 통해 여러분께 도움이 되었으면 좋겠습니다.
본 사이트에 대한 지지에 감사드립니다!...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
두 갈래 트리 정의:
struct BiNode
{
int dada;
BiNode *lchild;
BiNode *rchild;
};
반복 최대값 찾기:
int Find_max(BiNode *root)///
{
int maxm=root->data;
if(root->lchild!=NULL)
{
int maxleft=Find_max(root->lchild);
maxm=max(maxm,maxleft);
}
if(root->rchild!=NULL)
{
int maxright=Find_max(root->rchild);
maxm=max(maxm,maxright);
}
return maxm;
}
반복 최소값 찾기:
int Find_min(BiNode *root)///
{
int minn=root->data;
if(root->lchild!=NULL)
{
int minleft=Find_min(root->lchild);
minn=min(minn,minleft);
}
if(root->rchild!=NULL)
{
int minright=Find_min(root->rchild);
minn=min(minn,minnright);
}
return minn;
}
판단 함수:
int ISBST(BiNode *root)
{
if(root==NULL)
return 1;
if(root->lchild!=NULL && Find_max(root->lchild) > root->data)/// , return
return 0;
if(root->rchild!=NULL && Find_min(root->rchild) < root->data)/// , return
return 0;
if(ISBST(root->lchild) && ISBST(root->rchild))///
return 1;
}
방법 2:
두 갈래 나무의 중차 역행 결과를 수조에 저장하고 수조의 원소가 단조롭게 증가하는지 판단하면 된다
void inorder(BiNode *root)
{
if(root==NULL)
return;
if(root->lchild!=NULL)
inorder(root->lchild);
temp[k++]=root->data;
if(root->rchild!=NULL)
inorder(root->rchild);
}
void ISBST()
{
int flag=0;
for(int i=1; i
방법3: 방법2의 개선: 개척수조가 공간의 복잡도를 차지하기 때문에 선구 노드를 설정하고 매번 선구 노드와 비교하기만 하면 된다
int ISBST(BiNode *root)
{
BiNode *pre;
if(root!=NULL)
{
if(!ISBST(root->lchild))
return 0;
if(pre!=NULL && root->data data)
return 0;
pre=root;
if(!ISBST(root->rchild))
return 0;
}
return 1;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 데이터 구조 2차원 트리의 실현 코드일.두 갈래 트리 인터페이스 2 노드 클래스 3. 두 갈래 나무 구현 이 글을 통해 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.