컴공 일기199
게시글 주소: https://orbi.kr/00059142130
BinarySearchTree에서 삭제 기능을 구현한 것인데, 이런 코드는 짰을 때 혼이 나야 될 겁니다.
왜냐하면, 좋은 코드의 조건인 'Readability(가독성)'을 아주 현저하게 떨어뜨리기 때문에 그렇습니다.
C언어에는 포인터라는 문법이 있습니다. 문법적인 의미는, 직접적으로 메모리에 '접근'하여 내가 원하는 대로 그 메모리를 해석하고 변형할 수 있다는 것이지요. 그렇다면 포인터가 이중으로 있다면요? 벌써부터 숨이 막힙니다.
메모리의 메모리에 접근한다..?
그 메모리가 가리키는 또 다른 메모리에 접근한다는 맥락이 되어버리죠. 어떻습니까.
딱봐도, 직관적으로 이해하기가 굉장히 힘들어 질 뿐더러, 지시하는 쪽과 지시되는 쪽 사이의 관계 파악에서도 쉽지가 않지요?
결론. 더블 포인터는 웬만하면 안 쓰는 것이 맞습니다. 더블 포인터를 어쩔 수 없이 써야하는 상황이라면,
진짜 써야 되겠지만(시험에서 2차원배열의 인덱스를 이중 포인터로 가리키도록 할 때는 당연히 써야지요.)
어쩌면, 내가 처음부터 구조적으로 설계를 잘못했을 가능성이 굉장히 큽니다.
애초에 이 삭제 기능만 보더라도, 이렇게 복잡하게 더블 포인터를 써야할 이유가 전혀 없습니다.
다른 방식이 있다는 것이지요.
void BST_RemoveNode(BSTNode** Tree, int Target)
{
BSTNode* pTmp; BSTNode* Parent = NULL;
if (!Tree)
return;
else if (Target < (*Tree)->Data)
BST_RemoveNode(&(*Tree)->Left, Target);
else if (Target > (*Tree)->Data)
BST_RemoveNode(&(*Tree)->Right, Target);
//삭제할 노드를 찾은 케이스
else
{
//자식이 0명
if (!(*Tree)->Left && !(*Tree)->Right)
{
printf("Deleted Data %d\n", (*Tree)->Data);
free(*Tree);
*Tree = 0;
return;
}
//자식이 1명
else if( !(*Tree)->Left && (*Tree)->Right)
{
pTmp = *Tree;
*Tree = (*Tree)->Right;
printf("Deleted Data %d\n", pTmp->Data);
free(pTmp);
return;
}
else if ((*Tree)->Left && !(*Tree)->Right)
{
pTmp = *Tree;
*Tree = (*Tree)->Left;
printf("Deleted Data %d\n", pTmp->Data);
free(pTmp);
return;
}
//자식이 2명
else
{
BSTNode* RC = (*Tree)->Right;
if (!RC->Left)
{
(*Tree)->Data = RC->Data;
(*Tree)->Right = RC->Right;
printf("Deleted Data %d\n", RC->Data);
free(RC);
return;
}
else
{
while (1)
{
if (RC->Left)
{
Parent = RC;
RC = RC->Left;
}
else break;
}
(*Tree)->Data = RC->Data;
Parent->Left = RC->Right;
printf("Deleted Data %d\n", RC->Data);
free(RC);
return;
}
}
}
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
이번 기말 물리학 애들 피셜로는 1컷 97이었는데 나빼고 성적 다 떨어져서 89나오더라
-
기분 ㅈㄴ 저기압임 7 0
뭐 하나라도 눈에 거슬리면 터질 것 같음
-
문학 공부법 도와주세요 ㅠㅠ 2 0
제가 비문학을 못해서 모고 때 비문학 지문당 2개이상씩 틀리는데 그래도 문학은 전체...
-
생윤러들 ㅇㅈ? 4 1
유교 이미지 불교 도가
-
국어 감이 갑자기 떨어짐 1 0
글이 술술 읽혀야하는데 몰입이 안되고 계속 끊김 지문 읽는 속도랑 깊이가 죽은...
-
오늘은 늦게 잘거임 4 0
오늘 데옾!!
-
서림님유튜브 이제봄 2 0
범..이 인간적으로 좀.. 예… ㅎㅎㅎ…. 성적이랑별개로걍 ㅎㅎㅎ
-
노래추천 2 0
노래는 진짜좋은데 제목이ㅠㅠ
-
국어 주간지 추천좀 3 0
현역이고 국어 3모부터 84 97 100 93 수특 수완 다 못해서 감 유지용으로...
-
한평생 그 과목 1등급은 구경도 못해본 친구가 1컷 궁예하는걸 볼때가 있음
-
킥킥.. (문학메타 9일차) 3 1
당신……, 당신이라는 말 참 좋지요, 그래서 불러봅니다 킥킥거리며 한때 적요로움의...
-
본인이다 싶으면 댓 ㄱㄱ
-
흠 차라리 이돈이면 실모랑 엔제 사는게 나은가 서바가 이만큼의 가치가 있는지 잘 몰겟다
-
제일 못하는 과목 4 0
‘미술‘ 근데 얘네는 진로과목도 아니라 보는 학교가 진짜 없긴하더라고여
-
중딩으로 돌아가고싶네 8 2
진짜재밌었는데
-
난 사실 시인이 되고싶었어 3 1
말도 예쁘게 하고 글도 예쁘게 쓰는 그런 사람이 되고싶었어
-
교재쇼핑은 재밌다 3 0
어학시험 준비한다고 오랜만에 교재 쇼핑 좀 했는데 재밌군
-
여기 사람들이 시험지 조감이랑 평가는 존나 잘하는데 본인들이 그걸 잘 푸는 건 별개임...
-
느낌이그래
-
다들 고생하셨습니다 14 4
내일도 화이팅
-
밀짱도루묵 10 4
-
Ai 너무 진짜같음 5 0
충격적임..
-
다시 내신을 챙기면 0 1
한 1.66 1.66 정도는 할 수 있으니 설자전 하나 상향 던지고 인서울 세 개랑...
-
운동량을 줄일까..
-
재수생 7덮 등급컷 1 0
좀 대략적으로 어느정도인지 알여주세여.. 화작 85 확통80 영어79 세지42 사문44
-
책 디자인 GOAT.jpg 5 3
아아... 또 216 당신이야
-
강민철T 새기분 이후 질문 0 0
강기분 새기분하고 아이트래킹까지 끝냈는데 이후에 인강민철이나 FEED100이나...
-
내신충으로 다시 타락해야겠음 1 1
에휴
-
사실 오르비밖을나가면 10 0
공부잘하는게 ㅈ도쓸모없는능력같긴함..
-
오르비 굿나잇 5 0
자러감
-
여기만보면 입시마렵에 5 1
로그아웃한다
-
국바 2회 슈방방.. 0 0
진짜 개망 첨으로 50점대 받았어요.. 6평 88에서 수직낙하했.. 현소에서...
-
의치목표아니면 미적도 할이유없나 17 1
입시어렵네
-
현실은 정시로 의치는 택도 없는 수준이라 과탐 필수인 학교 쓰려고 울며 겨자먹기로...
-
7/18 수학물리 공부인증 4 1
수학 분수부등식 > 삼차함수OR유리식 그대로 f정의역↔f^-1치역 f치역↔f^-1...
-
부엉이 쿠션 1 1
볼수록 탐나네 그렇다고 11기 부엉이를 입양하고 싶은 건 아닌…
-
야이맛국노야 0 0
너지금
-
허들링 미적 수1 수2 중 하나 선택하면 뭔가요??? 2 0
허들링까진 안보려다 한권은 풀어보고싶네요 어떤게 가장 퀄이 좋은가요???
-
트럼프 "캐나다 산불 오염 비용, 관세에 추가해야" 2 0
[서울=뉴시스]허준희 인턴 기자 = 도널드 트럼프 미국 대통령이 캐나다 산불로 인한...
-
밖에 천둥친다 5 0
무서운데 나 좀 안아줄 여르비 어디 없나
-
맛동산 담배 트라이 해볼까 3 0
침착맨 쇼츠 보고 진지하게 시도해볼까 고민중
-
교통사고를 세글자로 줄이면 머게 16 2
붕~~~~~~~어? 빵!!!!!!!
-
ㅎㅇ 4 0
ㅎㅇ
-
1일차 학습 수행 완료 0 0
집에오니까 6시반이어서 너무빡셌네요 ㅠㅠ 담주부턴 좀 조정해야겠어요
-
7덮 국어 수완 연계 0 0
혹시 7덮 국어 수완까지도 연계되어 있나요?
-
근데클럽너무존나시끄럽지않냐 7 0
ㄹㅇ 시발 지금도 이명있는데 난 지금 클럽가라고하면못가고안감
-
사1과1은 설 곳이 없네 6 0
5%대학 비집고 들어가야하나
-
클럽가본사람 있나요? 2 0
클럽가면 뭐하나요?
-
머리스타일 ㅇㅈ 13 0
전에도 했던 재탕이긴한데 살 붙기 전임 ㅇㅈ 메타를 굴리자꾸나 사람이 없긴 없구나
-
옛날 수능 성적표 폭력적이네 5 1
과목이 몇개야 ㄷㄷ

첫번째 댓글의 주인공이 되어보세요.