반응형
최근... 어쩌다 보니 알고리즘을 공부하게 되었다.
이진트리를 코딩 하려고 이클립스를 깔아서 손을 댈려고 하는데..... 이게 쉽사리 손이 안 간다. 슬펐다.
딱히 어렵지 않은 알고리즘 이라고 생각했는데 머리가 안 굴러 간다.
사실 내가 여지껏 한 업무는 프레임워크 기반에서 사용자의 요구사항을 받아서 구현하는 것이다 보니
프로세스 잘 세워서 SQL 만들고 if, for 문만 알면 된다. 별 다른 기술이 필요 없다.
그래서 점점 똥멍청이화 되어 가고 있는 것 같아서... 알고리즘 공부를 시작 한다.
잡담이 길었다.. 아래는 그냥 여기저기 둘러보고 만든 이진트리 만드는 거랑 전위, 중위, 후위 찍는 코드이다.
Traversal ? 순회를 한다고 표현을 하던데.. 객체를 만들어서 연결을 시키고 하는게 익숙하지가 않다.
출력을 하는 위치랑 이름이랑 딱 맞아 떨어지는게 신기하다... ㅎㅎ
package com.kei;
public class BinaryTree {
public static void main(String[] args) {
BinaryTree bTree = new BinaryTree();
Tree root = null;
root = bTree.addNode(root, 5);
root = bTree.addNode(root, 3);
root = bTree.addNode(root, 8);
root = bTree.addNode(root, 1);
root = bTree.addNode(root, 4);
root = bTree.addNode(root, 2);
root = bTree.addNode(root, 6);
root = bTree.addNode(root, 9);
root = bTree.addNode(root, 7);
/*
* 5
* 3 8
* 1 4 6 9
* 2 7
*/
System.out.print("preorder : ");
bTree.printPreOrder(root);
System.out.println();
System.out.print("inorder : ");
bTree.printInOrder(root);
System.out.println();
System.out.print("postorder : ");
bTree.printPostOrder(root);
}
private Tree addNode(Tree node, int getData) {
Tree newNode = new Tree(getData);
if(node == null) {
return newNode;
} else {
if(node.data > getData) {
node.left = addNode(node.left, getData);
} else {
node.right = addNode(node.right, getData);
}
return node;
}
}
private void printPreOrder(Tree node) {
if(node != null) {
System.out.print(node.data + " ");
printPreOrder(node.left);
printPreOrder(node.right);
}
}
private void printInOrder(Tree node) {
if(node != null) {
printInOrder(node.left);
System.out.print(node.data + " ");
printInOrder(node.right);
}
}
private void printPostOrder(Tree node) {
if(node != null) {
printPostOrder(node.left);
printPostOrder(node.right);
System.out.print(node.data + " ");
}
}
private class Tree {
Tree left;
Tree right;
int data;
private Tree(int getData) {
this.data = getData;
}
}
}
반응형
댓글