1991 문제에서는 <부모 왼쪽자식 오른쪽자식>과 같은 포맷으로 노드를 입력하고 있습니다.
노드 삽입 시 부모 노드를 탐색해야 해서, 각 노드를 <데이터, 왼쪽자식포인터, 오른쪽자식포인터>를 갖도록 하였고 트리객체는 모든 노드를 treeArr라는 배열에 넣어 관리하도록 하였습니다.
그런데 노드 삽입 도중 트리의 높이가 3을 초과하게 되면 삽입하고자 하는 노드에 대한 포인터 할당이 되지 않습니다. 더 정확하게는 부모노드의 자식포인터에 새 노드를 가리키는 포인터를 넣어주지만 함수 실행이 끝난 뒤에 확인해보면 부모노드의 자식포인터는 여전히 null값을 지닙니다.
예를 들면 다음과 같은 트리를 입력하려고 하면 A ↙ ↘ B C ↙ ↙ ↘ D E F ↙ G
A~F까지는 부모 노드와 자식 노드간 연결이 잘 되지만, F노드에서 G노드로 향하는 포인터가 null을 갖게 됩니다. 그러나 디버깅해보면 treeArr배열에는 G노드가 분명히 입력되어있습니다.
다른 구조의 트리들로 여러 번 테스트해봐도 트리 높이 3을 마지막으로 그 이상의 노드들에 대해서는 자식 포인터가 할당이 되지 않습니다. 혹시 이유를 아는 분이 계시다면 답변 부탁드립니다.
문제가 복잡해서 최대한 자세히 설명하려고 노력하였으나 그래도 글이 장황하여 이해가 안되는 부분이 있다면 알려주세요. 고치겠습니다.
jh1one 5년 전
트리를 구현하다가 이해가 안되는 점이 있어 질문드립니다.
1991 문제에서는 <부모 왼쪽자식 오른쪽자식>과 같은 포맷으로 노드를 입력하고 있습니다.
노드 삽입 시 부모 노드를 탐색해야 해서,
각 노드를 <데이터, 왼쪽자식포인터, 오른쪽자식포인터>를 갖도록 하였고
트리객체는 모든 노드를 treeArr라는 배열에 넣어 관리하도록 하였습니다.
그런데 노드 삽입 도중 트리의 높이가 3을 초과하게 되면 삽입하고자 하는 노드에 대한 포인터 할당이 되지 않습니다.
더 정확하게는 부모노드의 자식포인터에 새 노드를 가리키는 포인터를 넣어주지만
함수 실행이 끝난 뒤에 확인해보면 부모노드의 자식포인터는 여전히 null값을 지닙니다.
예를 들면 다음과 같은 트리를 입력하려고 하면
A
↙ ↘
B C
↙ ↙ ↘
D E F
↙
G
A~F까지는 부모 노드와 자식 노드간 연결이 잘 되지만, F노드에서 G노드로 향하는 포인터가 null을 갖게 됩니다.
그러나 디버깅해보면 treeArr배열에는 G노드가 분명히 입력되어있습니다.
다른 구조의 트리들로 여러 번 테스트해봐도 트리 높이 3을 마지막으로 그 이상의 노드들에 대해서는 자식 포인터가 할당이 되지 않습니다. 혹시 이유를 아는 분이 계시다면 답변 부탁드립니다.
문제가 복잡해서 최대한 자세히 설명하려고 노력하였으나 그래도 글이 장황하여 이해가 안되는 부분이 있다면 알려주세요. 고치겠습니다.
긴 글인데도 관심갖고 읽어 주셔서 감사합니다.
아래는 혹시 글이 이해가 안되실까봐 참고용으로 넣은 소스코드입니다.