SB tree (Size Balanced Tree)
네티즌 의 조언 을 받 아 SB Tree 를 써 보 세 요.
============================================================================
SB 란 바보 X 가 아니 라 Size Balanced 라 는 뜻 이다.본인 도 비교적 사용 을 건의 합 니 다. 쓰기 가 비교적 간단 하기 때 문 입 니 다.이런 나무 구 조 는 하나의 특징 이 있 는데 모든 노드 에 대해 그의 좌우 나무 크기 (단순히 노드 수량 으로 이해 할 수 있 음) 가 같 거나 하나만 다르다.
정의 및 초기 화
type
point = ^node;
node = record
l,r : point;
x,s : longint;
end;
var
root,null : point;
tmp : point;
procedure init;
begin
new(null);
null^.x:=-maxlongint;
null^.s:=0;
null^.l:=null;
null^.r:=null;
root:=null;
end;
이것 은 다른 몇 가지 나무 와 구조 차이 가 많 지 않 습 니 다. 변수 s (size) 를 하나 더 유지 하고 이 노드 를 뿌리 로 하 는 하위 나무의 크기 를 저장 합 니 다.분명히 빈 나무의 크기 는 0 이다.
끼어들다
PS. 회전 에 관 해 서 는 AVL 트 리 를 참조 하 세 요.
삽입 은 매우 간단 합 니 다. 먼저 노드 를 정확 한 위치 에 꽂 은 다음 에 재 귀 할 때 회전 을 통 해 나무의 크기 를 조정 합 니 다.그림:
이 나무 에 1 삽입:
대응 하 는 위치 에 삽입:
회전 한 후에 (여 기 는 5 만 회전 합 니 다. 2, 3 노드 가 모두 요 구 를 만족 시 키 기 때 문 입 니 다):
우 리 는 여전히 함수 로 쓴다.
function add(now:point;x:longint):point;
begin
if now = null then //
begin
new(now);
now^.l:=null;
now^.r:=null;
now^.s:=1;
now^.x:=x;
exit(now);
end;
if now^.x >x then
begin
now^.l:=add(now^.l,x);
inc(now^.s);
if now^.l^.s > now^.r^.s+1 then //
begin
now^.s:=now^.r^.s+now^.l^.r^.s+1;
now^.l^.s:=now^.s+now^.l^.l^.s+1;
exit(TurnLeft(now));
end;
exit(now);
end
else
begin
now^.r:=add(now^.r,x);
inc(now^.s);
if now^.r^.s > now^.l^.s+1 then
begin
now^.s:=now^.l^.s+now^.r^.l^.s+1;
now^.r^.s:=now^.s+now^.r^.r^.s+1;
exit(TurnRight(now));
end;
exit(now);
end;
end;
삭제
AVL 과 같은 생각 으로 잎 사 귀 로 돌려 서 지우 고, Size 가 큰 하위 트 리 로 돌려 줍 니 다.사 는 게 뭔 지도 AVL 참조 하 세 요.
function del(now:point;x:longint):point;
begin
if now = null then
exit(null);
if now^.x = x then
if now^.l^.s > now^.r^.s then
begin
now:=TurnLeft(now);
now^.r:=del(now^.r,x);
dec(now^.s);
end
else
begin
if now^.r = null then
begin
dispose(now);
exit(null);
end;
now:=TurnRight(now);
now^.l:=del(now^.l,x);
dec(now^.s);
end
else
if now^.x > x then
now^.l:=del(now^.l,x)
else
now^.r:=del(now^.r,x);
dec(now^.s);
exit(now);
end;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.