[Java] 이진 트리 클래스

RUNGOAT·2023년 6월 18일
0

Java

목록 보기
5/5

이진 트리 구조 만들기

Java에서 Binary Tree 자료구조를 만드는 코드
전위 순회, 중위 순회, 후위 순회 코드


📃 관련 문제

백준 - 트리 순회

주어진 조건

  • 첫째 줄에 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)
  • 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다.
  • 노드의 이름은 A부터 차례대로 알파벳 대문자로 매겨지며, 항상 A가 루트 노드가 된다.
  • 자식 노드가 없는 경우에는 .으로 표현한다.
  • 입력값 예시
    7
    A B C
    B D .
    C E F
    E . .
    F . G
    D . .
    G . .

코드

class Node {
	char data;
	Node left, right;
	
	Node(char data) {
		this.data = data;
	}
}

class Tree {
	Node root;
	
	void createNode(char data, char leftData, char rightData) {
		if (root == null) {
			root = new Node(data);
			root.left = leftData != '.' ? new Node(leftData) : null;
			root.right = rightData != '.' ? new Node(rightData) : null;
		} else {
			searchNode(root, data, leftData, rightData);
		}
	}
	
	void searchNode(Node node, char data, char leftData, char rightData) {
		if (node == null) {
			return;
		} else if (node.data == data) {
			node.left = leftData != '.' ? new Node(leftData) : null;
			node.right = rightData != '.' ? new Node(rightData) : null;
		} else {
			searchNode(node.left, data, leftData, rightData);
			searchNode(node.right, data, leftData, rightData);
		}
	}
	
	void preOrder(Node node) {
		if (node != null) {
			System.out.print(node.data);
            preOrder(node.left);
            preOrder(node.right);
		}
	}
	
	void inOrder(Node node) {
		if (node != null) {
        	inOrder(node.left);
			System.out.print(node.data);
			inOrder(node.right);
		}
	}
	
	void postOrder(Node node) {
		if (node != null) {
        	postOrder(node.left);
            postOrder(node.right);
			System.out.print(node.data);
		}
	}
}

public class Main {
	
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	
    	int N = Integer.parseInt(br.readLine());
    	Tree tree = new Tree();
    	
    	for (int i = 0; i < N; i++) {
    		StringTokenizer st = new StringTokenizer(br.readLine());
    		char root = st.nextToken().charAt(0);
    		char left = st.nextToken().charAt(0);
    		char right = st.nextToken().charAt(0);
    		
    		tree.createNode(root, left, right);
    	}
    	
    	tree.preOrder(tree.root);
    	System.out.println();
    	tree.inOrder(tree.root);
    	System.out.println();
    	tree.postOrder(tree.root);
    	
    	br.close();
    }
}
profile
📞피드백 너무나 환영

0개의 댓글