두 갈래 검색 트 리 (BST) 에 대한 동작
struct node
{
int data;
node*l;
node* r;
};
첫 번 째 는 찾기 동작 입 니 다:
void search(node* root,int x)
{
if(root==NULL)
{
printf("no");
return;
}
if(root->data==x)
{
printf("yes");
return;
}
if(x<root->data)
search(root->l,x);
else
search(root->r,x);
}
두 번 째 삽입 동작:
void insert(node* &root,int x)
{
if(root==NULL)
{
root=new node;
root->data=x;
return ;
}
if(root->data==x)
return;
if(x<root->data)
insert(root->l,x);
else
insert(root->r,x);
}
세 번 째 는 삭제 작업 입 니 다. 여기 서 설명 하고 자 하 는 것 은 실제 삭 제 된 작업 은 많은 실현 방식 이 있 고 재 귀 와 비 재 귀 가 있 습 니 다. 여기 서 재 귀 를 사 용 했 습 니 다. 실현 이 간단 하고 실수 하기 쉬 우 며 시험장 과 경기 에서 쓰기 쉽 기 때 문 입 니 다.
node* findPre(node* root)
{
while(root->r!=NULL)
root=root->r;
return root;
}
node*findPost(node* root)
{
while(root->l!=NULL)
root=root->l;
return root;
}
bool deletee(node* root,int x)
{
if(root==NULL)
return false;
if(root->data==x)
{
if(root->l==NULL&&root->r==NULL)
{
root=NULL;
return true;
}
else
{
if(root->l!=NULL)
{
node* pre=findPre(root->l);
root->data=pre->data;
deletee(root->l,pre->data);
}
else
{
node* post=findPost(root->r);
root->data=post->data;
deletee(root->r,post->data);
}
}
}
else
{
if(x<root->data)
deletee(root->l,x);
else
deletee(root->r,x);
}
}
기본적으로 이것 뿐 이지 만 데이터 로 테스트 한 적 이 없 지만 대체적인 사고방식 은 이렇다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.