2023. 11. 27. 14:08ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1260
-> ์ด์ ๋ฌธ์ ํ์ด
9. Tree ๋ง๋จ ๋ ธ๋๊น์ง์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก (DFS)
์ค๋ช
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ด์งํธ๋ฆฌ์์ ๋ฃจํธ ๋ ธ๋ 1์์ ๋ง๋จ๋ ธ๋๊น์ง์ ๊ธธ์ด ์ค
๊ฐ์ฅ ์งง์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๊ฐ ๊ฒฝ๋ก์ ๊ธธ์ด๋ ๋ฃจํธ๋ ธ๋์์ ๋ง๋จ๋ ธ๋๊น์ง ๊ฐ๋๋ฐ ์ด๋ํ๋ ํ์๋ฅผ ์ฆ ๊ฐ์ (์์ง)์ ๊ฐ์๋ฅผ ๊ธธ์ด๋ก ํ๊ฒ ์ต๋๋ค.
์ถ๋ ฅ
๊ฐ์ฅ ์งง์ ๊ธธ์ด๋ 3๋ฒ ๋ ธ๋๊น์ง์ ๊ธธ์ด์ธ 1์ด๋ค.
๋ฌธ์ ํ์ด 1
public class ShortestLengthToEndNode2
{
Node root;
public int DFS(int L, Node root)
{
if (root.lt == null && root.rt == null) { // ๋ง๋จ node์ด๋ผ๋ฉด ?
return L;
}else
{
return Math.min(DFS(L + 1, root.lt), DFS(L + 1, root.rt)); // ์์ node๊ฐ ํ๋๋ง ์์ผ๋ฉด ์๋ฌ๋๋ค.
}
}
public static void main(String[] args)
{
ShortestLengthToEndNode2 tree = new ShortestLengthToEndNode2();
tree.root = new Node(1);
tree.root.lt = new Node(2);
tree.root.rt = new Node(3);
tree.root.lt.lt = new Node(4);
tree.root.lt.rt = new Node(5);
int result = tree.DFS(0, tree.root);
System.out.println(result);
}
}
๐พ : ๋ ธ๋ ๋ฌธ์ ๊ฐ ๊ณ์ ๋์ค๊ณ ์๊ธฐ ๋๋ฌธ์ class Node ๋ง๋๋ ์ฝ๋๋ ์๋ตํ๋ค. (์ด์ ๋ฌธ์ ํ์ด์์๋ ๋ณผ ์ ์์)
๊ทธ๋ฆฌ๊ณ ๋ ธ๋์ ์งง์ ๊ฑฐ๋ฆฌ๊ตฌํ๊ธฐ ~ ๋ญ ์ด๋ฐ์์ ๋ฌธ์ ๋ DFS๋ณด๋ค BFS๋ก ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ํ๋ค. ์๋ํ๋ฉด DFS๋ก ํ ๊ฒฝ์ฐ ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๊ฐ ํ์ชฝ๋ง ์๊ฑฐ๋ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฌดํผ.. ์ง๊ธ์ ๋ฐฐ์ฐ๋ ์ค์ด๊ธฐ ๋๋ฌธ์ DFS๋ก๋ ํธ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ๋ฐฐ์ธ ๊ฒ์ด๋ค.
๋จผ์ ๊ทธ๋ฆผ๊ณผ ๋์ผํ๊ฒ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , DFS ๋ก ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ์ด๋ root node์ ๋ ๋ฒจ (๊ฐ์ ๊ธธ์ด)๋ฅผ ๋๊ฒจ์ค๋ค.
public int DFS(int L, Node root)
{
if (root.lt == null && root.rt == null) { // ๋ง๋จ node์ด๋ผ๋ฉด ?
return L;
}else
{
return Math.min(DFS(L + 1, root.lt), DFS(L + 1, root.rt)); // ์์ node๊ฐ ํ๋๋ง ์์ผ๋ฉด ์๋ฌ๋๋ค.
}
}
๊ทธ๋ฆฌ๊ณ DFS ์์ root ์ lt์ rt๊ฐ null ์ด๋ฉด ๋ง๋จ ๋ ธ๋๋ผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ก L ๊ฐ์ ๋๊ฒจ์ค๋ค.
๋ง๋จ ๋ ธ๋๊ฐ ์๋๋ผ๋ฉด ์ฌ๊ท ํจ์๋ก L +1 ํด์ lt์ rt ๊ฐ์ ๊ฐ๊ฐ ๋๊ฒจ์ฃผ๊ณ , ๋ฆฌํด ๋ฐ์ L ๊ฐ ์ค Math.min ๊ฐ์ ๊ตฌํด์ ๋ฆฌํดํด์ฃผ๋ฉด ๋๋ค.
๋ง๋ก ์ค๋ช ํด๋ณด์๋ฉด DFS(1) ์ ๋ง๋จ ๋ ธ๋๊ฐ ์๋์๊ธฐ ๋๋ฌธ์ DFS(๊ธธ์ด 1, ๋ ธ๋ 2) ์ DFS(๊ธธ์ด 2, ๋ ธ๋ 3)์ ํธ์ถํ ๊ฒ์ด๋ค.
๋จผ์ ์คํ์ ์์ธ DFS(๊ธธ์ด 1, ๋ ธ๋ 2)๋ ์ญ์ ๋ง๋จ ๋ ธ๋๊ฐ ์๋๊ธฐ ๋๋ฌธ์ DFS(๊ธธ์ด 2, ๋ ธ๋ 4), DFS(๊ธธ์ด 2, ๋ ธ๋ 5) ์ ํธ์ถํ๋ค.
์ด์ DFS(๊ธธ์ด 2, ๋ ธ๋ 4)์ DFS(๊ธธ์ด 2, ๋ ธ๋ 5)๋ ๋ง๋จ ๋ ธ๋ ์ด๊ธฐ ๋๋ฌธ์ L ์ธ 2๋ฅผ ๊ฐ๊ฐ ๋ฆฌํดํ๊ณ DFS(๊ธธ์ด 1, ๋ ธ๋ 2)๋ก ๋์์ค๋๋ฐ, ์ฌ๊ธฐ์ Math.min์ ํ๊ธฐ ๋๋ฌธ์ ๋ ธ๋ 4์ ๋ ธ๋ 5์ ๊ธธ์ด ์ค ์์ ๊ฐ์ 2์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ์คํ์ ์์๋ DFS(๊ธธ์ด 1, ๋ ธ๋ 3)์์๋ ๋ง๋จ ๋ ธ๋์๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ก L ๊ฐ 1์ ๋ฆฌํดํ๊ณ , ์ด์ DFS(๊ธธ์ด 0, ๋ ธ๋ 1)๋ก ๋์๊ฐ๋ค.
๊ทธ๋ผ DFS(๊ธธ์ด 0, ๋ ธ๋ 1) ๋ก ๋์์ค๋๋ฐ ์ด์ Math.min(node(2), node(3)) ์ ๋ํ ๊ธธ์ด ์ค ์ต์ ๊ฐ์ 1์ด์๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ก 1์ ๋ฆฌํดํด์ฃผ๋ฉด ๋๋ค.