ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ตํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ง๋ ์๊ฐ์์ ์ค๋ช ํ๋ฏ์ด ํ์์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํจ ์ด๋ผ๊ณ ํ๋ค.
์ด๋ฐ ํธ๋ฆฌ ํ์ํ๋๋ฐ์ ์กฐ๊ธ ๋ ํจ์จ์ ์ด๋ฉฐ ์ฒด๊ณ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ๊ทธ ๋ํ ์ฃผ์ 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 ๊ฐ์๊ฐ ์ ๋ง ์ ๋์์๊ธฐ ๋๋ฌธ์ ํด๋น ์ ํ๋ธ๋ฅผ ๋ณด๊ณ ํ์ตํ๋ ๊ฒ์ ๋ด ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋๊ฒ ๋ณด๋ค ํจ์ฌ ๋ง์ด์ถ์ฒํ๋ค..
๋๊ธ