Written on
·
310
0
안녕하세요.
항상 질이 높은 교수님의 강의덕에 이 부분까지 공부하게된 학생입니다.
제가 알기로는 전위순회는 부모노드->왼쪽노드->오른쪽 노드 순으로 출력을 하는 것으로 알고 있습니다.
처음 문제만 접했을 때는 전위순회에 집착을 해서 고민하다가 풀지를 못했습니다.
교수님 설명을 들으면 맨 아래의 노드들만 출력을 하게 되어 있습니다.
만약, 부모노드는 출력을 하지 않는 형태이며 마지막 노드만 출력되는 형태면 전위,중위,후위 모두 왼쪽 오른쪽 순서로 출력이 되는 것으로 알고 있습니다.
어느 부분을 전위순회로 봐야 할지 알고 있던 부분과 혼동이 되고 있어 질문드립니다.
Answer 5
0
0
저도 헷갈려 영상을 방금 다시 봤습니다. 부분집합을 출력하는 순서를 말해주기위해 그렇게 전위순회라 했던것 같습니다. 그 때 당시에 제가 생각했던 것은 DFS(L+1)이 호출되기 전에 ch[L]=1를 먼저 작업하라는 의미로 전위순회라 말했던것 같습니다.
그런데 이 문제에는 딱히 전위, 중위, 후위라는 개념이 없는 것 같습니다. 문제를 제 주관적인 입장에서 생각없이 쓴것 같습니다. 그냥 명확하게 "아래와 같은 순서로 출력하세요"라고 했어야 맞는 것 같습니다. 감사합니다^^
0
59번 문제 동영상에서 질문하기를 눌러서 쓴 글이라 자동적으로 달리는 것으로 착각 했습니다.
제가 미처 확인을 하지 못한 점 죄송합니다.
제가 교수님 말씀을 이해한게 맞다면 59번 문제에 "이진트리 전위순회 방식으로 출력한다" 부분은 크게 신경쓰지 않아도 될까요?
만약 이 문제에서 "이진트리 중위/후위순회 방식으로 출력한다" 라고 한다면 달라지는 부분이 있을까요?
0
질문의 요지를 제가 잘 파악하지 못한 것 같아 다시 말씀드리자면
"DFS 모든 문제가 전위, 중위, 후위 출력형태 중 하나다" 라고 생각하지 마시고 그냥 그 문제를 풀기위해 재귀를 이용해 깊이탐색 방법으로 코드를 짜는 사람이 마음대로 조작하면서 본인만의 코드를 구현한다라고 생각하면 좋을 것 같습니다.
0
저도 이제 일어나서 작업을 하려고 하는데 질문이 있네요^^
질문은 해당 영상에서 질문을 하시기 바랍니다. 그리고 문제 이름을 질문 제목에 적어주시고요. 어떤 문제를 풀다 질문을 하는지 모르겠지만 대충 이야기 드리자면
노드를 출력한다에 너무 집중하지 마세요. 노드 출력은 전위, 중위, 후위가 이렇게 차이가 있다 정도를 보여줄려고 한 것일뿐입니다. 실제 문제를 풀때는 노드를 출력한다의 개념이 아닙니다. 그리고 DFS에서 트리의 노드라는 것도 재귀함수 그 자체입니다.
DFS 대부분의 문제는 노드를 출력하는 것이 아니라 트리를 깊이로 탐색하면서 내가 원하는 경우가 완성된 노드로 왔을 때(트리의 형태로 보면 하나의 가지를 따라 말단노드까지 왔을 때가 하나의 경우가 완성된 지점임) 그때 카운팅을 하던지 아니면 그 말단노드까지 온 과정에서 내가 작업한 내용을 출력하던지 하는 것입니다. 부분집합 문제를 보자면 한 가지를 따라 말단노드까지 왔을 때 부분집합 하나가 완성된 지점이고, 이 지점에서 그 부분집을 출력하는 것이지 말단노드 자체를 출력하는 것이 아닙니다.
그리고 부분집합 문제에서 보듯이 모든 노드(즉 모든 재귀함수)에게 출력기능을 준 것이 아니라 말단 노드에게만 출력기능을 준 것입니다.
제가 DFS를 풀때 전위순회 형태가 대부분이다 라고 한 것은
ch[L]=i;
DFS(L+1);
위에 코드처럼 해당 함수가 호출되기 전에 사전 작업을 먼저 하고 호출되는 형태로 문제를 풀기 때문에 그런 이야기를 한 것이지 진짜 뭔가를 출력하는 것은 아닙니다. 괜히 헷갈리게 대부분 전위순회 형태라고 말 한 것 같네요. 그 영상은 내용을 약각 수정해야겠네요.
전위, 중위, 후위는 실제 문제를 풀때는 그렇게 중요하지 않습니다. 전위, 중위, 후위를 따지는 경우는 병합정렬 정도입니다. 나중에 병합정렬 영상을 보면서 내가 하고자 하는 부분정렬을 후위순회위치에서 해야 정렬이 되는 구나 정도만 느끼면 됩니다. 전위, 중위, 후위의 개념은 이 영상에서 느끼는 정도면 됩니다.
너무 고민하지 마시고 그냥 문제를 풀어보세요. 많이 풀다보면 스스로 정립이 될겁니다.