3
-1 0 1
2
이 경우 1이 출력되어야 합니다.
1068번 - 트리
https://doyak.s-ul.eu/bu9J9h2k
그러면 어딘가 보장할 수 없는 동작을 하는 곳이 있을 것으로 보이네요. 한 번 찾아보죠.
그거겠네요.
tree[parentNode].nOfChildren++;
tree가 지역변수이기 때문에, nOfChildren이 초기화가 안 되어있죠.
디버깅 해보면 이상한 값이 들어가는 걸 볼 수 있습니다.
댓글을 작성하려면 로그인해야 합니다.
apwgg045 6년 전
코드 작동 방식
0. 노드를 50개 저장하는 배열을 입력받고, 루트노드의 주소값을 root에 저장하며, 각 노드에 자식이 생길 때마다 nOfChild값을 1씩 증가시킴
1. 제거하려는 노드의 부모 노드로 접근하여 nOfChild를 1 빼고, 부모 노드 포인터를 NULL로 설정
(루트 노드를 제거한 경우는 if문으로 따로 처리)
2. 노드가 저장되어 있는 배열을 돌면서 nOfChild 값으로 리프 노드를 확인
3. while문을 통해 부모 노드가 없는 노드(루트노드)까지 올라가서, root와 주소값을 비교함으로써 제거된 노드의 리프노드들을 걸러낼 수 있음(2에 의해)
생각할 수 있는 예외도 전부 처리했고 결과도 맞게 나오는데 오답처리가 되는 이유를 모르겠습니다.