[Algorithm] 이진트리의 순회 알고리즘(JAVA 구현)

2019. 11. 7. 14:19·Algorithm & Data Structure
반응형

-이진트리란?

  트리의 한 종류로써 대표적인 비선형 자료구조의 형태로 1개의 데이터에 대해 0, 1, 2개의 자식 노드를 가지는 트리를 말한다. 이진트리는 일반적으로 탐색을 할 때 많이 사용하는데 그 이유는 특정 데이터를 탐색하고자 할 때 좌, 우로 나뉘어서 탐색하기 때문에 한쪽을 일방적으로 제외할 수 있어 빠른 탐색속도를 가지게 된다.  이진트리의 구현은 일반적으로 배열과 노드를 이용해 구현이 가능하지만, 완전 이진트리를 제외하고는 배열을 사용할 때 많은 메모리 낭비가 발생하기 때문에 노드로 구현하는 것이 좋다.

 

-이진트리의 순회방식

  이진트리의 순회방식으로는 3가지가 존재하는데 1)전위순회, 2)중위순회, 3)후위순회이다. 이는 탐색하는 순서에 따라 구분되며 D를 현재의 노드, L을 왼쪽 자식노드,R을 오른쪽 자식노드라 할 때 순서대로 각각 D-L-R, L-D-R, L-R-D의 형태로 트리를 순회하게 된다. 후위순회의 경우에는 컴퓨터에서 수식을 연산할 때 사용되므로 계산기와 같은 프로그램을 만들 때 유용하다.

 

class Doubly_List_Node{// 노드 클래스
	private int data; //노드의 데이터 필드
	public Doubly_List_Node Llink; // 노드의 왼쪽 링크 필드
	public Doubly_List_Node Rlink; // 노드의 오른쪽 링크 필드
	
	public Doubly_List_Node() { // 노드의 기본 생성자
		this.data =0;
		this.Llink = null;
		this.Rlink = null;

	}
	
	public Doubly_List_Node(int data) {
		this.data = data;
		this.Llink = null;
		this.Rlink = null;
	}
	
	public Doubly_List_Node(Boolean jud,Doubly_List_Node link) {
		if(jud == true) {
			this.data = 0;
			this.Llink = link;
			this.Rlink = null;
			
		}else {
			this.data = 0;
			this.Llink = null;
			this.Rlink = link;
		}
		
	}
	
	public Doubly_List_Node(Boolean jud,Doubly_List_Node link,int data) {
		if(jud == true) {
			this.data = data;
			this.Llink = link;
			this.Rlink = null;
			
		}else {
			this.data = data;
			this.Llink = null;
			this.Rlink = link;
		}
	}
	
	public Doubly_List_Node(Doubly_List_Node Llink,Doubly_List_Node Rlink) {
			this.data = 0;
			this.Llink = Llink;
			this.Rlink = Rlink;				
	}
	
	public Doubly_List_Node(int data, Doubly_List_Node Llink,Doubly_List_Node Rlink) {
		this.data = data;
		this.Llink = Llink;
		this.Rlink = Rlink;				
}
	
	
	public int getData() { // 노드의 데이터를 반환하는 메소드
		return this.data;
	}
	
	public void setData(int i) {
		this.data = i;
	}
	
}
public class Binary_tree {
	public static void preOrder(Doubly_List_Node prenode) { // 이진트리를 전위순회 출력 방식
		
		if(prenode !=null) { // 공백노드가 아니라면
		System.out.print(prenode.getData() + " / "); 
		preOrder(prenode.Llink);
		preOrder(prenode.Rlink);

		}
	
}
public static void inOrder(Doubly_List_Node prenode) { // 이진트리를 중위순회 출력 방식
	
	if(prenode !=null) { // 공백노드가 아니라면
	
		inOrder(prenode.Llink);
		System.out.print(prenode.getData() + " / "); 
		inOrder(prenode.Rlink);

	}

}
public static void postOrder(Doubly_List_Node prenode) { // 이진트리를 후위순회 출력 방식
	
	if(prenode !=null) { // 공백노드가 아니라면
	
		postOrder(prenode.Llink);
		postOrder(prenode.Rlink);
		System.out.print(prenode.getData() + " / "); 

	}

}
	public static void main(String[] args) {
		
		Doubly_List_Node arr[] = new Doubly_List_Node[16]; //15개의 데이터
		
		for(int i=0;i<arr.length;i++) {
			arr[i] = new Doubly_List_Node(i);
		}
		
		for(int i=1;i<arr.length;i++) {
			if(i %2 ==0) { // i가 2의 배수일 경우 즉, 짝수일 경우 왼쪽 자식노드에 위치하고 
				arr[i/2].Llink = arr[i];
			}else { // 홀수일 경우 오른쪽 자식노드에 위치하게 된다.
				arr[i/2].Rlink = arr[i];
			}
		}
		
		preOrder(arr[1]);
	}

}
저작자표시 (새창열림)
'Algorithm & Data Structure' 카테고리의 다른 글
  • [Algorithm] 다이나믹 프로그래밍
  • [Algorithm] Kruskal 알고리즘 (JAVA 구현)
  • [Algorithm] Union-Find 알고리즘 (JAVA 구현)
  • [Algorithm] 깊이 우선 탐색 알고리즘(JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    medium
    meidum
    자바
    component-scan
    BOJ
    백준7576
    프로그래머스
    next 14
    백준1260
    백준7576자바
    백준1427
    boj1427
    leetcode 2236
    백준2751
    boj2108
    Easy
    Java
    TypeScript
    백준
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[Algorithm] 이진트리의 순회 알고리즘(JAVA 구현)
상단으로

티스토리툴바