붉 은 검 은 나무 계열 의 회전
2304 단어 검 붉 은 나무
이 진 트 리 는 매우 광범 위 한 데이터 구 조 를 사용 하지만 일반적인 삽입 이 라면 이 진 트 리 의 높이 가 너무 높 고 나무 전체 가 불 균형 한 상황 을 초래 할 수 있다.레 드 블랙 트 리 는 균형 이 잡 힌 이 진 트 리 로 C + STL 의 set 이 며, map 와 그 확장 용기 내부 의 데이터 구 조 는 모두 레 드 블랙 트 리 입 니 다.
(2) 좌회전
예 를 들 어 x 를 y 의 왼쪽 결점 으로 돌려 야 한다.전체 알고리즘 의 사고방식 은 매우 뚜렷 하 다. 위 에서 아래로 Y 지침 을 받 고 x 의 오른쪽 지침 이 y 의 왼쪽 결점 을 가리 키 는 것 을 말 한 다음 에 parent 함 수 를 이용 하여 x 의 아버지 결점 을 얻는다. 만약 에 NULL 이면 y 는 새로운 뿌리 이 고 NULL 이 아니라면 x 가 아버지의 왼쪽 아이 인지 오른쪽 아이 인지 에 따라 지침 을 y 를 가리킨다.마지막 으로 y 의 왼쪽 바늘 을 x 로 가리 키 며 회전 을 완성 합 니 다.주의해 야 할 것 은 알고리즘 은 순서 가 있 는 논리 적 절차 로 순 서 를 바 꿀 수 없습니다. 할당 순 서 를 바 꾸 면 메모리 가 지침 을 잃 고 메모리 오류 가 발생 할 수 있 습 니 다.
코드: 주: parent 는 아버지의 결점 을 구 하 는 함수 입 니 다. 루트 는 루트 노드 메모리 영역 을 가리 키 는 지침 입 니 다.
// , x->pRight!=NULL
void left_rotate(NODE *head,NODE *x)//head ,x
{
if(x->pRight!=NULL)
{
NODE *y=x->pRight;
if(y->pLeft!=NULL)
x->pRight=y->pLeft;
NODE *px=parent(x,head);
if(px==NULL)// x , y
root=y;
else if(px->pLeft==x)
px->pLeft=y;
else
px->pRight=y;
y->pLeft=x;
}
else
printf("item %ld !",x->item);
}
(3) 우 회전
방법 은 왼쪽 회전 과 기본적으로 같 지만 방향 은 반대 이 며 그 과정 을 더 이상 군말 하지 않 는 다.
코드:
// , y->pLeft!=NULL
void right_rotate(NODE *head,NODE *y)//head ,y
{
if(y->pLeft!=NULL)
{
NODE *x=y->pLeft;
if(x->pRight!=NULL)
y->pLeft=x->pRight;
NODE *py=parent(y,head);
if(py==NULL)
root=x;
else if(py->pLeft==y)
py->pLeft=x;
else
py->pRight=x;
x->pRight=y;
}
else
printf("item %ld !",y->item);
}
//
NODE *parent(NODE *pNode,NODE *head)
{
NODE *result=NULL;
if(head!=NULL)
{
if(head->pLeft==pNode || head->pRight==pNode)
return head;
if(head->pLeft!=NULL)
{
result=parent(pNode,head->pLeft);
if(result!=NULL)//
return result;
}
if(head->pRight!=NULL)
{
result=parent(pNode,head->pRight);
if(result!=NULL)
return result;
}
}
return result;// , NULL
}
결론: 회전 하 는 알고리즘 의 사고방식 이 매우 뚜렷 하고 전체적인 논리 적 사고 가 중점 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
붉 은 검 은 나무의 독서 노트이 진 트 리 는 동적 정렬 된 데이터 구조 로 삽입, 삭제, 찾기 등 을 지원 하 며 평균 시간 복잡 도 는 O (log (N) 이지 만 일반 이 진 트 리 는 나무 가 한 가지 로 퇴화 하 는 것 을 보장 하지 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.