[μλ£ κ΅¬μ‘°] μλ°λ₯Ό μ΄μ©ν νΈλ¦¬μ 3κ°μ§ μν λ°©λ² κ΅¬ννκΈ° :: Tree Traversal (InOrder, PostOrder, PreOrder)
νΈλ¦¬ μλ£κ΅¬μ‘°λ₯Ό νμ΅νλ κ°μ₯ ν° μ΄μ λ μ§λ μκ°μμ μ€λͺ νλ―μ΄ νμμ ν¨μ¨μ μΌλ‘ νκΈ° μν¨ μ΄λΌκ³ νλ€.
μ΄λ° νΈλ¦¬ νμνλλ°μ μ‘°κΈ λ ν¨μ¨μ μ΄λ©° 체κ³μ μΈ λ°©λ²μ΄ μλλ°, κ·Έ λν μ£Όμ 3κ°μ§λ₯Ό μ΄λ² μκ°μλ μμλ³΄κ³ κ΅¬νκΉμ§ λ§μ³λ³΄κ² λ€.
-
InOrder
-
PreOrder
-
PostOrder
-
λ 벨 μμ μν (μ΄λ²μλ λ€λ£¨μ§ μμ κ²μ΄λ€)
μν
for(String name : names) {
name.toString();
}
λ°°μ΄μ μΈλ±μ€ 0 λΆν° κΈΈμ΄λ§νΌ λ°λ³΅νλ κ²μ΄ Iteration μ΄λΌκ³ λΆλ¦¬λ μνλ₯Ό νλ κ²μ΄λ€.
μνλΌκ³ νλ€λ©΄ μμ΄λ‘λ Circulation. λ°λ‘ μμλ₯Ό νλ νλ νμΈνλ€λ λ»μ΄λ€.
μ°λ¦¬λ μ¬μ€ λ§μ λΆλΆμμ μνλ₯Ό κ²½νν΄ μμλ€.
νμ§λ§ μμΌλ‘ μ°λ¦¬κ° λ°°μΈ μνμ λ€λ₯Έ μ μ΄ μ‘΄μ¬νλ€λ©΄, λ°°μ΄μ΄λ 리μ€νΈλ 1μ°¨μμ μΈ ν κ°μ§ λ°©λ²μ μνλ§ ν μ μλ€λ©΄, νΈλ¦¬λ μ¬λ¬ λ°©λ²μΌλ‘ μννλ 체κ³κ° μλ€.
μ²μ²ν λ°°μ보μ.

ν΄λΉ ꡬ쑰λ μμΌλ‘ λ°°μΈ μν λ°©λ²μ μ¬μ©λ νΈλ¦¬μ΄λ μ°Έκ³ νκ³ , νΈλ¦¬μ μνλ₯Ό ꡬννκΈ° μν΄μ λ€μκ³Ό κ°μ μ½λλ₯Ό μ€λΉνλ€.

κ°λ¨νκ² νΈλ¦¬λ₯Ό ν΄λμ€μ λ Έλ ν΄λμ€λ₯Ό μ΄μ©ν΄μ μ΄μ§ νΈλ¦¬λ₯Ό λ§λ€μ΄λμ. μμ€μ½λλ μλμ 첨λΆν κ²μ΄λ μ λ°λΌμ€κΈΈ λ°λλ€.
InOrder
μ€μ μνλΌκ³ λ λΆλ¦¬λ InOrderμ μΌμͺ½ μμ -> λ£¨νΈ λ Έλ -> μ€λ₯Έμͺ½ μμ μμλ‘ λ°©λ¬Ένλ€.
- μΌμͺ½ μμ λ Έλ
- νμ¬ λ Έλ
- μ€λ₯Έμͺ½ μμ λ Έλ
μμ κ°μ νΈλ¦¬κ° μ‘΄μ¬ν λ μΌμͺ½ μμμ΄ λ Έλκ° μμ λ κΉμ§ λ°©λ¬Ένκ³ λ Έλκ° μλ€λ©΄ μΆλ ₯νλ€.

κ·ΈλΌ μ΄λ κ² λ΄λ €κ°κ² λ κ²μ΄λ€.
μ΄μ κ°μ κ³Όμ μ μ°λ¦¬λ ꡬννκΈ° μν΄μ μ¬κ· νΈμΆμ ν΅ν΄μ ꡬννλ€.

λ Έλκ° nullμ΄ μλ λ κΉμ§ μ¬κ· νΈμΆμ μννλ€.
InOrderκ° μΌμͺ½ μμ λ Έλ λ¨Όμ μΆλ ₯νκ³ νμ¬ λ Έλ μΆλ ₯ ν μ€λ₯Έμͺ½ μμμ μΆλ ₯νλ κ²μ΄λ μμ κ°μ μ½λκ° λμ¬ μ μλ€.
PreOrder
μ μ μνλΌκ³ λ λΆλ¦¬λ InOrderμ λ£¨νΈ λ Έλ -> μΌμͺ½ μμ λ Έλ -> μ€λ₯Έμͺ½ μμ μμλ‘ λ°©λ¬Ένλ€.
- νμ¬ λ Έλ
- μΌμͺ½ μμ λ Έλ
- μ€λ₯Έμͺ½ μμ λ Έλ

νμ¬ λ Έλλ₯Ό μΆλ ₯νκ³ μΌμͺ½ μμ λ Έλ -> μ€λ₯Έμͺ½ μμ λ Έλ μμλ‘ λ°©λ¬Ένλ©° μΆλ ₯νλλ° μΌμͺ½ μμ λ Έλμ μμ λ Έλκ° μ‘΄μ¬νμ§ μμ λ κΉμ§ μλλ‘ κ³μ μ¬κ·νΈμΆνλ€.

μ΄κ² λν λ Έλκ° nullμ΄ μλ λ κΉμ§ λ°λ³΅νκ³ νμ¬ λ Έλλ₯Ό λ¨Όμ μΆλ ₯ ν μΌμͺ½ μ€λ₯Έμͺ½μ μ¬κ· νΈμΆ νλ€.
PostOrder
νμ μνλΌκ³ λ λΆλ¦¬λ InOrderμ λ£¨νΈ λ Έλ -> μΌμͺ½ μμ λ Έλ -> μ€λ₯Έμͺ½ μμ μμλ‘ λ°©λ¬Ένλ€.
- νμ¬ λ Έλ
- μΌμͺ½ μμ λ Έλ
- μ€λ₯Έμͺ½ μμ λ Έλ

λ Έλκ° μ‘΄μ¬νμ§ μμ λ κΉμ§ νμ¬ λ Έλμ μΌμͺ½ μμ -> μ€λ₯Έμͺ½ μμ νμ¬ λ Έλ μμλ‘ μννλ©΄ λλ€.

μ 체 μμ€ μ½λ
class TraversalNode{
int data;
TraversalNode rightNode;
TraversalNode leftNode;
}
class TraversalTree{
TraversalNode root;
TraversalNode getRoot() {
return root;
}
void setRoot(TraversalNode root) {
this.root = root;
}
/*λ
Έλλ₯Ό λ§λλ λ©μλ*/
void makeNode(int data, TraversalNode left, TraversalNode right){
TraversalNode node = new TraversalNode();
node.data = data;
node.leftNode = left;
node.rightNode = right;
}
void inOrder(TraversalNode node){
if (node != null){
inOrder(node.leftNode);
System.out.println(node.data);
inOrder(node.rightNode);
}
}
void preOrder(TraversalNode node){
if(node != null){
System.out.println(node.data);
preOrder(node.leftNode);
preOrder(node.rightNode);
}
}
void postOrder(TraversalNode node){
if(node != null){
postOrder(node.leftNode);
postOrder(node.rightNode);
System.out.println(node.data);
}
}
}
μ΄λ κ² νΈλ¦¬μ μν λ°©λ²μ λν΄μ μμ보μλλ° μν λ°©λ²μ νμμλ μ λ§ μ€μνκ³ λ€μμ κ°μ ꡬνν BFS, DFSμλ μ€μν κ°λ μ΄ λλ€.
μ κ·Έλλ μ΄λ €μ΄ BFS, DFSμ νΈλ¦¬μ μν λ°©λ²κΉμ§ μ΄λ ΅κ² λκ»΄μ§λ€λ©΄ μ λ§ μ§μ₯μ΄ λ μ μλ€.
κ·Έλ¬λ―λ‘ μ§κΈ 미리 κ³ ν΅μ λ°κ² λλ€λ©΄ λ€μμ΄ νΈν΄μ§λ€λ λ§μμΌλ‘ νμ€ν μμκ°μ.
μ νλΈ www.youtube.com/watch?v=QN1rZYX6QaA κ°μκ° μ λ§ μ λμμκΈ° λλ¬Έμ ν΄λΉ μ νλΈλ₯Ό λ³΄κ³ νμ΅νλ κ²μ λ΄ λΈλ‘κ·Έλ₯Ό 보λκ² λ³΄λ€ ν¨μ¬ λ§μ΄μΆμ²νλ€..