컴공 일기199
게시글 주소: https://dev.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를 선물하세요.
-
⭐️수학고수급구⭐️ 0 0
수2 골라줘잉
-
미친개념 뉴런 3 0
재수생인데 이미지쌤 세젤쉬들었는데 친절하시고 이해가 잘 되더라고요. 그래서 이미지쌤...
-
뉴런, 스블 4 0
안녕하세요 현 예비고2 이고 공통 2027 자이 한번 돌린 상태인데요, 제가...
-
현우진 개정 기하 출간 0 0
현우진 쌤이 드디어 개정전 기하, 즉 기하와 벡터 강의를 출간했다. 왕귀
-
담배 피는 사람 특 0 0
전전두엽이 발달하지 못해서 충동대로 행동할 가능성 ㅈㄴ 높음 요즘 세상에 담배 피는 놈은 뭐냐
-
재수하면 뉴런 스블 3 0
작수 미적 21 22 29 30 틀렸습니다. 두발 반 정도 공부 놓고 사니까 감도...
-
10번 240610 11번 240911 12번 250612 13번 230913...
-
26뉴런 책으로 그대로 27뉴런 수업 들어도 괜찮나요? 25뉴런도 있었는데...
-
실전 개념 강의 추천좀요 2 0
뉴런이나 스블 중 하나 할 것 같은데 뭔가 도구정리보다는 기출을 푸는 흐름, 논리를...
-
뉴런 계획 질문 1 0
뉴런듣는데 수1 수2 미적을 동시에 들으며 시냅스 모두 병행하는데 하루에 3개...
-
안녕하세요 09년생입니다. 뉴분감은 몇회독 정도가 적당한가요? 또 각 회독 회차마다...
-
수학 커리큘럼 0 0
수1 수2 아이디어랑 기생집 병행중인데 다끝난다음 복습하고 그다음으로 뭐해야되나요?...
-
이 로드맵 받으신 분들이 있나요? 혹시 있으시다면 찍어서 보내주시면 감사하겠습니다...!
-
시대 2 0
문과 인문계이고 성적 3합 10인데 아예 입구컷인가요? 추합 아예 불가일까요 기숙입니다
-
뉴런 스블 7 0
수1 수2 미적 다 뉴런 샀는데 버리고 스블할만큼 좋나요?? 뉴런이랑 스블 둘 다 하는 건 어떤가여
-
작수 수학공통 4틀 0 0
신성규T 수업 들으려고 하는데요 작수 수학공통만 4개나 틀렸는데 듣는데 지장...
-
미적분 실전개념 0 0
현역입니다.지금 시발점 쎈 수분감 다 했고 시대인재 들어가기전에 뉴런이랑 마더텅...
-
현우진 시발점 5 0
시발점이 2027이렇게 나오는게 아니라 그냥 2015개정안 시발점 2022개정안...
-
개정시발점 수2 완강했는데 그 다음에 어떻게 해야할지 고민입니다.(개발점 기준...
-
현우진 인강추천 2 0
지금 김범준 스블 수강중인 고2인데요. 정시파이터인데 올해안에 스블 수1 수2를...
-
한완수vs뉴런 1 0
한완수 실전개념편이랑 뉴런 비교했을 때 뭐가 더 실전개념량이 많은가요? 그리고...
-
뉴런 시냅스 필수인가요 3 0
시간상 시냅스까진9모 전에 못할거같은데 뉴런만 들어도 괜찮을까요?? 시냅스...
-
수학 뉴런 조언좀여 6 0
현제 걍 수학모고3만 나옵니다 그리고 시발점은 안들어봤어요 이미지 미친기분으로...
-
인강 듣기 싫음.. 7 0
문제 푸는건 좋은데 인강 듣기가 싫으면 어떡함? 시발점 들으려고 하다가 집중 안돼서...
-
현재 고2입니다. 뉴런 수1은 굉장히 만족하며 들었는데 수2는 제가 85강짜리...
-
뉴런 재수강 3 1
현역이고 1등급 목표 아니라 n제 막 풀 생각 없고, 지금 뉴런 1회독도 벅차서...
-
있는 분 계신가요..?
-
뉴런 공부법 5 0
뉴런은 예습이 중요하다던데 어떻게 공부해야하나요?
-
수학 훈수좀 0 0
예비고2고 지금 수1 김기현 파데 끝났는데 쎈이랑 병행하기 좋은 문제집...
-
26뉴런 기다릴지 25뉴런 사고 달릴지 고민중입니다 근데 25뉴런 수1...
-
드릴 가도 괜찮을까요? 1 0
9모 88점 (14 22 30) N티켓 시즌1, 시즌2 풀었고 4규 시즌1 푸는...
-
허수 n제 추천 0 0
뉴런 수1만 듣고 수2 미적은 안 들었는데 이번 9모때 88점 받았습니다. 뉴런 안...
-
n기출 4점집중 난이도 1 0
n기출 4점집중 문제 난이도 어떤가요? 어려운 3점은 없고 쉬운 4점부터 준킬러...
-
뉴런 드릴 시냅스 차이가 뭔가요?? 워크북 필요한가요?? 수분감: 평가원 기출...
-
N티켓 미적 원래 어려움? 1 0
초반은 괜찮았는데 오늘 멘탈 나가네... Day 7, 8 정도 오니까 반도 못...
-
N티켓이나 4규에도 0 0
함수 대칭성 관련된 문제 있나요? e^cosx은 x=1 선대칭이다 같은거 써먹는...
-
합성함수 대칭성 이해 안 가서 드랍했다가 다시 봤는데 이해됨... 문제 푸는거 대칭...
-
수학 진짜 망한건가 0 0
6모 2등급 턱걸이, 내신 끝났는데 마음이 급하고 조급해진다... 수1 수2 미적...
-
수학 커리 현우진 강윤구 5 0
평가원 모고 기준 낮2~높3 받는 재수생입니다. 뉴런이랑 강윤구 point 3,...
-
수학 ebs vs 기출 1 0
사정이 있어서 3월부터 수학 시작했는데ㅠㅠ 5월까지 공통, 미적 뉴런이랑 수특 다...
-
2년만에 군수를 하려고 하는데요 2년 전 수능 수학 3 떴고 개념을 좀 까먹은...
-
뉴런 수2 미분계수 0 0
-정점 1개, 동점 1개 -쌍방향으로 다가감 이 조건들 만족하면 무조건 미분계수로...
-
김기현이 대성가면..? 11 2
1타 먹을 수 있다고 생각하심? 난 솔직히 메가에서도 1타 ㅆㄱㄴ이라 보는데...
-
브랜뉴런 왜이럼 7 2
음질이 100년 전으로 퇴화한 수준인데.. 음질 너무 안 좋지 않나요 설마...
-
2025 뉴런 이거 맞나요? 4 0
수1 뉴런하는데 80문제 중 50문제? 정도밖에 못 맞히고시냅스도 24문제 정도...
-
드릴 드릴드 드릴드드 드릴드드드 10 1
현우진 드릴 옛날거 남아있던데 2025 드릴이랑 드릴234이런거 뭐뭐...
-
수2 시발점 질문 3 0
수2 시발점에서 뉴런에서 알려주는 비율관계 같은거 알려주시나요?? 시발점 듣고...
-
김현우 현강 뉴런 병행 0 0
김현우t 미적 듣는중인데 뉴런 같이 하는게 나음? 딱히 현강 소화 어렵진않음
-
뉴런 병행 교재 1 0
뉴런 내용은 나름 소화할만한데 제가 강의 내용을 제대로 이해했는지 아니면 제가...

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