2023. 11. 21. 14:21ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1256
์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ด) : ํผ๋ณด๋์น ์ฌ๊ท (๋ฉ๋ชจ์ด์ ์ด
https://hyejin.tistory.com/1255 ์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ด) : ํฉํ ๋ฆฌ์ผ https://hyejin.tistory.com/1254 ์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ด) :
hyejin.tistory.com
-> ์ด์ ๋ฌธ์ ํ์ด
5. ์ด์ง ํธ๋ฆฌ ์ํ
์ค๋ช
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ด์งํธ๋ฆฌ๋ฅผ ์ ์์ํ์ ํ์์ํ๋ฅผ ์ฐ์ตํด๋ณด์ธ์.

์ ์์์ ์ถ๋ ฅ
1 2 4 5 3 6 7
์ค์์์ ์ถ๋ ฅ
4 2 5 1 6 3 7
ํ์์์ ์ถ๋ ฅ
4 5 2 6 7 3 1
๋ฌธ์ ํ์ด
public class BinaryTreeTraversal
{
Node root;
public void DFS(Node root)
{
if (root == null) { // ๋ง๋จ๊น์ง ๊ฐ๋ค๋ ์๊ธฐ
return;
}else {
System.out.print(root.data + " "); // ์ ์ ์ํ
DFS(root.lt);
// System.out.print(root.data + " "); // ์ค์ ์ํ
DFS(root.rt);
// System.out.print(root.data + " "); // ํ์ ์ํ
}
}
public static void main(String[] args)
{
BinaryTreeTraversal tree = new BinaryTreeTraversal();
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);
tree.root.rt.lt = new Node(6);
tree.root.rt.rt = new Node(7);
tree.DFS(tree.root);
}
}
class Node {
int data;
Node lt, rt;
public Node(int val)
{
data = val;
lt = rt = null;
}
}
๐พ : ํธ๋ฆฌ ๊ด๋ จ ๋ฌธ์ ๋ ํ์ด๋ณธ ์ ์ด ์์ด์ ์ด๋ฒ์ ๊ฐ์๋ฅผ ๋จผ์ ๋ค์ด๋ดค๋ค.
class Node {
int data;
Node lt, rt;
public Node(int val)
{
data = val;
lt = rt = null;
}
}
์ฐ์ Node๋ผ๋ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค๊ณ , ๊ทธ ๋ค์ data ๊ฐ ๋ถ๋ชจ ๋ ธ๋, lt ์๋ ์ผ์ชฝ ์์, rt๋ ์ค๋ฅธ์ชฝ ์์์ ์ค์ ํ ๊ฒ์ด๋ค.
์์ฑ์์๋ val ๋ฅผ ๋ฐ์ผ๋ฉด ์ฐ์ ๋ถ๋ชจ ๋ ธ๋์ data์ ๊ทธ ๊ฐ์ ๋ฃ์ด๋๊ณ , lt์ rt์๋ null ๊ฐ์ ๋ฃ์ด์ค๋ค.
BinaryTreeTraversal ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๊ฑฐ๊ธฐ์ ์ ์ญ ๋ณ์๋ก Node ๋ณ์๋ฅผ ํ๋ ์ ์ธํ๋ค.
public static void main(String[] args)
{
BinaryTreeTraversal tree = new BinaryTreeTraversal();
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);
tree.root.rt.lt = new Node(6);
tree.root.rt.rt = new Node(7);
tree.DFS(tree.root);
}
๊ทธ ๋ค์ tree.root์ Node ๊ฐ์ฒด ํ๋๋ฅผ ์์ฑํด์ ๊ฐ์ 1๋ก ์ค์ ํด์ค๋ค. (์ ์ผ ์ต์์ ๋ ธ๋)
๊ทธ๋ฆฌ๊ณ ์ด 1์ ๋ ธ๋์์ lt ์๋ ์ผ์ชฝ ๊ฐ Node 2๋ฅผ ์์ฑํด์ฃผ๊ณ , ์ค๋ฅธ์ชฝ rt ๊ฐ์๋ Node 3์ ์์ฑํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ด์ Node2์ ์ผ์ชฝ lt ๊ฐ์๋ Node 4๋ฅผ ์์ฑํด์ฃผ๊ณ , ์ค๋ฅธ์ชฝ rt ๊ฐ์๋ Node 5์ ์์ฑํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ Node3์ ์ผ์ชฝ lt ๊ฐ์๋ Node6์ ์์ฑํด์ฃผ๊ณ , ์ค๋ฅธ์ชฝ rt ๊ฐ์๋ Node 7 ์ ์์ฑํด์ค๋ค.
-> ์ด๋ ๊ฒ ํ๋ฉด ๊ทธ๋ฆผ์ด ์ด๋ฐ์์ผ๋ก ๊ทธ๋ ค์ง ๊ฒ์ด๋ค. (๊ทธ๋ฆผ์ ๊ฐ์์์ ์บก์ณํ์..)
๊ทธ๋ฆฌ๊ณ Node4, 5, 6, 7 ์์๋ null ๊ฐ์ด ๋ค์ด๊ฐ ๊ฒ์ด๊ณ ์ด๋ฌ๋ฉด ๋ง๋จ ๋ฐ์ดํฐ๋ผ๋ ๊ฒ์ด๋ค.
public void DFS(Node root)
{
if (root == null) { // ๋ง๋จ๊น์ง ๊ฐ๋ค๋ ์๊ธฐ
return;
}else {
System.out.print(root.data + " "); // ์ ์ ์ํ
DFS(root.lt);
// System.out.print(root.data + " "); // ์ค์ ์ํ
DFS(root.rt);
// System.out.print(root.data + " "); // ํ์ ์ํ
}
}
DFS ํจ์์ธ๋ฐ ์ด๋ root ๊ฐ null ์ด๋ผ๋ ๊ฑด ์ด์ ์์ ๋ ธ๋ ๋๊น์ง ๊ฐ๋จ ์๊ธฐ ์ด๋ฏ๋ก return ํ ๋ ์๋ฌด๊ฒ๋ ๋๊ฒจ์ฃผ์ง ์๊ณ ๋๋๋ค.
๊ทธ๋ฆฌ๊ณ null ์ด ์๋๋ผ๋ฉด ์ด์ ์ฌ๊ท ํจ์๋ฅผ ํธ์ถ ํ ๊ฒ์ธ๋ฐ ์ด๋ฒ์๋ ์ฌ๊ท ํจ์๋ฅผ ๋๋ฒ ํธ์ถํด์ผ ํ๋ค.
DFS(root.lt) ์ DFS(root.rt) ๋ฅผ ํธ์ถํ๋ฉด ๋๊ณ , ์ด๋ ์ถ๋ ฅ์ ์ด๋์ ํ๋๋์ ๋ฐ๋ผ ์ ์, ์ค์, ํ์ ์ถ๋ ฅ์ ํ ์ ์๋ค.
public void DFS(Node root)
{
if (root == null) { // ๋ง๋จ๊น์ง ๊ฐ๋ค๋ ์๊ธฐ
return;
}else {
System.out.print(root.data + " "); // ์ ์ ์ํ
DFS(root.lt);
DFS(root.rt);
}
}
-> ๋งจ ์์์ ์ถ๋ ฅํ๋ฉด ๋จผ์ root.data๋ฅผ ์ถ๋ ฅํ๊ณ DFS(root.lt)์ DFS(root.rt)๋ฅผ ์ถ๋ ฅํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ์ ์์๋ก ์ถ๋ ฅ์ ํ ์ ์๋ค.
1 2 4 5 3 6 7
public void DFS(Node root)
{
if (root == null) { // ๋ง๋จ๊น์ง ๊ฐ๋ค๋ ์๊ธฐ
return;
}else {
DFS(root.lt);
System.out.print(root.data + " "); // ์ค์ ์ํ
DFS(root.rt);
}
}
-> DFS(root.lt)์ DFS(root.rt) ์ฌ์ด์ ์ถ๋ ฅ ์ฝ๋๊ฐ ์์นํ๋ฉด lt ์ถ๋ ฅํ๊ณ , root.data ์ถ๋ ฅํ๊ณ , rt๋ฅผ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์
์ค์ ์์๋ก ์ถ๋ ฅํ ์ ์๋ค.
4 2 5 1 6 3 7
public void DFS(Node root)
{
if (root == null) { // ๋ง๋จ๊น์ง ๊ฐ๋ค๋ ์๊ธฐ
return;
}else {
DFS(root.lt);
DFS(root.rt);
System.out.print(root.data + " "); // ํ์ ์ํ
}
}
-> ๋ง์ง๋ง์ผ๋ก ์ถ๋ ฅ ์ฝ๋๊ฐ ๊ฐ์ฅ ๋ง์ง๋ง์ ์์นํ๋ฉด DFS(root.lt)์ DFS(root.rt) ๋ชจ๋ ์ถ๋ ฅํ ํ์ root.data ๋ฅผ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ ํ์ ์์๋ก ์ถ๋ ฅํ ์ ์๋ค.
4 5 2 6 7 3 1