2023. 11. 27. 15:42ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1261
-> ์ด์ ๋ฌธ์ ํ์ด
10. Tree ๋ง๋จ ๋ ธ๋๊น์ง์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก (BFS)
์ค๋ช
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ด์งํธ๋ฆฌ์์ ๋ฃจํธ ๋ ธ๋ 1์์ ๋ง๋จ๋ ธ๋๊น์ง์ ๊ธธ์ด ์ค
๊ฐ์ฅ ์งง์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๊ฐ ๊ฒฝ๋ก์ ๊ธธ์ด๋ ๋ฃจํธ๋ ธ๋์์ ๋ง๋จ๋ ธ๋๊น์ง ๊ฐ๋๋ฐ ์ด๋ํ๋ ํ์๋ฅผ ์ฆ ๊ฐ์ (์์ง)์ ๊ฐ์๋ฅผ ๊ธธ์ด๋ก ํ๊ฒ ์ต๋๋ค.
์ถ๋ ฅ
๊ฐ์ฅ ์งง์ ๊ธธ์ด๋ 3๋ฒ ๋ ธ๋๊น์ง์ ๊ธธ์ด์ธ 1์ด๋ค.
๋ฌธ์ ํ์ด 1
public class ShortestLengthToEndNode3
{
Node root;
public int BFS(Node root)
{
int L = 0;
Queue<Node> Q = new LinkedList<>();
Q.offer(root);
while (!Q.isEmpty())
{
int len = Q.size();
for (int i = 0; i < len; i++)
{
Node cur = Q.poll();
if (cur.lt != null) {
Q.offer(cur.lt);
}else {
return L;
}
if (cur.rt != null)
{
Q.offer(cur.rt);
}else {
return L;
}
}
L++;
}
return L;
}
public static void main(String[] args)
{
ShortestLengthToEndNode3 tree = new ShortestLengthToEndNode3();
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.BFS(tree.root);
System.out.println(result);
}
}
๐ฉ๐ป : ์ด์ ๋ฌธ์ ์ ์ค๋ช ์ ๋์ผํ๋ฐ ํธ๋ ๋ฐฉ๋ฒ์ ์ ๋ฒ ํ์ด๋ DFS ์ด๊ณ , ์ด๋ฒ ํ์ด๋ BFS๋ก ํธ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฌ์ค ์งง์ ๊ฑฐ๋ฆฌ ๊ตฌํ๋ ๋ฌธ์ ์ ๋ํด์๋ DFS๋ณด๋ค๋ BFS๋ก ํ์ด์ผ ํ๋ค..!!
public int BFS(Node root)
{
int L = 0;
Queue<Node> Q = new LinkedList<>();
Q.offer(root);
while (!Q.isEmpty())
{
int len = Q.size();
for (int i = 0; i < len; i++)
{
Node cur = Q.poll();
if (cur.lt != null) {
Q.offer(cur.lt);
}else {
return L;
}
if (cur.rt != null)
{
Q.offer(cur.rt);
}else {
return L;
}
}
L++;
}
return L;
}
์ฐ์ BFS๋ก ํ๊ธฐ ์ํด Queue๋ฅผ ์ ์ธํด์ฃผ๊ณ , ๋ค์ L์ ๋ ๋ฒจ 0์ ๋ฃ์ด์คฌ๋ค. ์ด L์ด ๊ฐ์ ์ ๊ฐ์, ์ฆ ๊ฑฐ๋ฆฌ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ Q์ node 1์ ๋จผ์ ๋ฃ์ด์ฃผ๊ณ , while๋ฌธ์ ๋ฐ๋ณตํ๋ฉด์ Q๊ฐ ๋น์ด์์ง ์์๋๊น์ง ๋ฐ๋ณตํด์ค๋ค.
Q์ size๋ฅผ ๊ตฌํด์ for๋ฌธ์ ๋๋๋ฐ ์ด๋ Q์์ ๊บผ๋ด์ ํ์ฌ cur์ lt์ rt๊ฐ ๋น์ด์์ง ์์ผ๋ฉด Q์ offer ํด์ฃผ๊ณ , null์ด๋ฉด ๋ง๋จ ๋ ธ๋๋ผ๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ L ํ์ฌ ๋ ๋ฒจ์ ๋ฆฌํดํด์ค๋ค. (๊ทธ๊ฒ ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ์ ๋ ธ๋์ด๊ธฐ ๋๋ฌธ)
for๋ฌธ์ ๋ค ๋์๋ค๋ ๊ฒ์ ๋ชจ๋ ๋ง๋จ ๋ ธ๋๊ฐ ์๋์๋ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ ๋ฒจ์ +1 ํด์ฃผ๊ณ , ๋ค์ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํด์ฃผ๋ฉด ๋๋ค.
๋ฌธ์ ํ์ด 2
public class ShortestLengthToEndNode4
{
Node root;
public int BFS(Node root)
{
Queue<Node> Q = new LinkedList<>();
int L = 0;
Q.offer(root);
while (!Q.isEmpty())
{
int len = Q.size();
for (int i = 0; i < len; i++)
{
Node cur = Q.poll();
if (cur.lt == null && cur.rt == null) return L;
if (cur.lt != null) Q.offer(cur.lt);
if (cur.rt != null) Q.offer(cur.rt);
}
L++;
}
return L;
}
public static void main(String[] args)
{
ShortestLengthToEndNode4 tree = new ShortestLengthToEndNode4();
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.BFS(tree.root);
System.out.println(result);
}
}
๐พ : ์ด๊ฑด ๊ฐ์ฌ๋ ํ์ด์ธ๋ฐ, ํจ์ฌ ๊น๋ํ๋ค. ใ ใ
if (cur.lt == null && cur.rt == null) return L;
์ด ๋ถ๋ถ์ด ๋ค๋ฅธ๋ฐ ๋ง๋จ ๋ ธ๋์ด๋ ค๋ฉด lt์ rt ๋ชจ๋ ์์ ๋ ์ต๋จ ๊ฑฐ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ค ๋ด๊ฐ ํผ ํ์ด๋ ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์ข ๋ฌ๋์ผ๋ฉด ํ๋ ธ์ ๊ฒ ๊ฐ๋ค..! ์๋ํ๋ฉด lt ๊ฐ์ ์๊ณ rt ๊ฐ์ ์์ ์๋ ์๋๋ฐ ์ด๋ด ๋ ๋ด๊ฐ ํผ ํ์ด๋ ์ด ์กฐ๊ฑด์์๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ผ๊ณ return L ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ lt์ rt ๊ฐ ๋ชจ๋ null ์ผ ๋๋ง์ด ๋ง๋จ ๋ ธ๋์ด๋ฏ๋ก ์ด๋ด๋๋ง return L ํด์ฃผ๊ณ ,
lt์ rt ์ค ํ๋๋ผ๋ null ์ด๋ฉด Q์ offer ํด์ค์ผ ํ๋ค.