โ ์ด์ง ํธ๋ฆฌ ์ํ
- ์ด์ง ํธ๋ฆฌ๋ ๋ถํ ์ ๋ณต ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋น ๋ฅธ ํ์์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
- ํ์ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์ ์, ์ค์, ํ์๋ก ๋๋๋ค
์ ์
- Node๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ชจ -> ์ผ์ชฝ ์์ -> ์ค๋ฅธ์ชฝ ์์
- ์์์ด ์ฌ๋ฟ์ผ ๊ฒฝ์ฐ ๋๊น์ง ํ๊ณ ๋ ๋ค.
- 1 2 4 5 3 6 7
์ค์
- Node๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ์์ -> ๋ถ๋ชจ -> ์ค๋ฅธ์ชฝ ์์
- ์ผ์ชฝ ๋๊น์ง ๋๋ฌํ์ฌ ๋ถ๋ชจ๋ฅผ ์ง๋ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ์งํ
- 4 2 5 1 6 3 7
ํ์
- ์ผ์ชฝ ์์ -> ์ค๋ฅธ์ชฝ ์์ -> ๋ถ๋ชจ ๋ฐฉํฅ
- ์์์ ๋จผ์ ํ์ ํ ๋ถ๋ชจ์๊ฒ ๊ฐ๋ค.
- 4 5 2 6 7 3 1
> ์ฝ๋ ๊ตฌํ
๊ตฌํ๋ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก, print๋ฌธ์ ์์๊ฐ ์ด๋๋์ ๋ฐ๋ผ
์ ์, ์ค์, ํ์๋ฅผ ๋๋ ์ ์๋ค.
import java.util.*;
Class Node{
int data;
Node lt,rt;
public Node(int val){
data=val;
lt=rt=null;
}
}
public class Main{
Node root;
public void DFS(Node root){
if(root==null) return; // ๋ง๋จ ๋
ธ๋๋ ๊ฐ์ด ์์(null), ์ฆ ๋ง๋จ ๋
ธ๋์ ๋์ฐฉํ๋ฉด ์ข
๋ฃ
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[]){
Main tree=new Main();
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.rott.lt.rt=new Node(5);
tree.root.rt.lt=new Node(6);
tree.root.rt.rt=new Node(7);
}
}
DFS๋ก ๋ถ๋ถ์งํฉ ๊ตฌํ๊ธฐ
public class Solution {
static int n;
static int[] ch;
public void DFS(int L){
if(L==n+1){
String tmp="";
for(int i=1; i<=n; i++){
if(ch[i]==1)
tmp+=(i+" ");
}
if(tmp.length()>0) System.out.println(tmp);
}else{
ch[L]=1;
DFS(L+1);
ch[L]=0;
DFS(L+1);
}
}
public static void main(String[] args) {
Solution T=new Solution();
n=3;
ch=new int[n+1];
T.DFS(1);
}
}
๋ง๋จ ๋ ธ๋๊น์ง์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ด์งํธ๋ฆฌ์์ ๋ฃจํธ ๋
ธ๋ 1์์ ๋ง๋จ๋
ธ๋๊น์ง์ ๊ธธ์ด ์ค ๊ฐ์ฅ ์งง์ ๊ธธ์ด๋ฅผ
๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๊ฐ ๊ฒฝ๋ก์ ๊ธธ์ด๋ ๋ฃจํธ๋
ธ๋์์ ๋ง๋จ๋
ธ๋๊น์ง ๊ฐ๋๋ฐ ์ด๋ํ๋ ํ์๋ฅผ ์ฆ ๊ฐ์ (์์ง)์ ๊ฐ์๋ฅผ
๊ธธ์ด๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ์งง์ ๊ธธ์ด๋ 3๋ฒ ๋
ธ๋๊น์ง์ ๊ธธ์ด์ธ 1์ด๋ค.
import java.util.*;
class Node{
int data;
Node lt, rt;
public Node(int val) {
data=val;
lt=rt=null;
}
}
public class Main{
Node root;
public int DFS(int L, Node root){
// ๋ง๋จ ๋
ธ๋
if(root.lt==null && root.rt==null) return L;
// ์์์ด 1๊ฐ ๋ฐ์ ์์ผ๋ฉด ์๋ฌ ๋ฐ์
else return Math.min(DFS(L+1, root.lt), DFS(L+1, root.rt));
}
public static void main(String args[]) {
Main tree=new Main();
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);
System.out.println(tree.DFS(0, tree.root));
}
}
'๐ ์ฝ๋ฉํ ์คํธ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] Stack ์ ๋ฆฌ (0) | 2022.11.05 |
---|---|
[JAVA] BigDecimal ์ ๋ฆฌ (0) | 2022.11.05 |
[JAVA] ์ฌ๊ทํจ์ ( ๋ฉ๋ชจ์ด์ ์ด์ ) (0) | 2022.11.03 |
[JAVA] HashMap (0) | 2022.10.28 |
[JAVA] ์ด์งํ์ ( Binary Search ) (0) | 2022.10.26 |