본문 바로가기
TechNical/JAVA

[자료구조][JAVA] Binary Tree

by 강멍멍이 2020. 9. 6.
반응형

최근... 어쩌다 보니 알고리즘을 공부하게 되었다.

이진트리를 코딩 하려고 이클립스를 깔아서 손을 댈려고 하는데..... 이게 쉽사리 손이 안 간다. 슬펐다.

딱히 어렵지 않은 알고리즘 이라고 생각했는데 머리가 안 굴러 간다.

사실 내가 여지껏 한 업무는 프레임워크 기반에서 사용자의 요구사항을 받아서 구현하는 것이다 보니

프로세스 잘 세워서 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;
		}
	}

}

 

반응형

댓글