[Algorithm] ๐Ÿฅˆ๋ฐฑ์ค€ 5639 ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ

HaJingJingยท2021๋…„ 5์›” 28์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
52/119

0. ๋ฌธ์ œ

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

  • ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ํ‚ค๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ์ž‘๋‹ค.
  • ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ํ‚ค๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ํฌ๋‹ค.
  • ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋„ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์ด๋‹ค.

    ์ „์œ„ ์ˆœํšŒ (๋ฃจํŠธ-์™ผ์ชฝ-์˜ค๋ฅธ์ชฝ)์€ ๋ฃจํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ๋…ธ๋“œ์˜ ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ํ›„์œ„ ์ˆœํšŒ (์™ผ์ชฝ-์˜ค๋ฅธ์ชฝ-๋ฃจํŠธ)๋Š” ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ๋ฃจํŠธ ๋…ธ๋“œ ์ˆœ์„œ๋Œ€๋กœ ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ์ „์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋Š” 50 30 24 5 28 45 98 52 60 ์ด๊ณ , ํ›„์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋Š” 5 28 24 45 30 60 52 98 50 ์ด๋‹ค.

    ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋…ธ๋“œ์— ๋“ค์–ด์žˆ๋Š” ํ‚ค์˜ ๊ฐ’์€ 106๋ณด๋‹ค ์ž‘์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค. ๋ชจ๋“  ๊ฐ’์€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง€๋ฉฐ, ๋…ธ๋“œ์˜ ์ˆ˜๋Š” 10,000๊ฐœ ์ดํ•˜์ด๋‹ค. ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ
์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

ํŠธ๋ฆฌ ํด๋ž˜์Šค๋ฅผ ์ž˜ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ํ•ต์‹ฌ

๐Ÿ’ก ๊ฐ’์ด root๋ณด๋‹ค ์ž‘๋‹ค๋ฉด root.left์— ์ €์žฅ
๐Ÿ’ก ๊ฐ’์ด root๋ณด๋‹ค ํฌ๋‹ค๋ฉด root.right์— ์ €์žฅ
๐Ÿ’ก postorderํ•จ์ˆ˜ ๊ตฌํ˜„

2. ํ•ต์‹ฌ ํ’€์ด

1) ๊ฐ’์ด root๋ณด๋‹ค ์ž‘๋‹ค๋ฉด root.left์— ์ €์žฅ

if(cur.value > value)
	cur.left = addNode(cur.left, value);
  1. ๊ฐ’์ด root๋ณด๋‹ค ํฌ๋‹ค๋ฉด root.right์— ์ €์žฅ
else if (cur.value < value)
	cur.right = addNode(cur.right, value);
  1. postorder ํ•จ์ˆ˜ ๊ตฌํ˜„
static void postorder(TreeNode root) {
	if(root.left != null)
		postorder(root.left);
		
	if(root.right != null)
		postorder(root.right);
		
	System.out.println(root.value);
}

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Graph_7 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		TreeNode root = new TreeNode(Integer.parseInt(br.readLine()));
		
		while(true) {
			String num = br.readLine();
			if(num == null || num.length() == 0)
				break;
			
			root = root.addNode(root, Integer.parseInt(num));
		}
		
		postorder(root);
	}
	
	static class TreeNode{
		int value;
		TreeNode left;
		TreeNode right;
		
		TreeNode(int value){
			this.value = value;
		}
		
		TreeNode addNode(TreeNode cur, int value) {
			if(cur == null)
				return new TreeNode(value);
			
			if(cur.value > value)
				cur.left = addNode(cur.left, value);
			else if (cur.value < value)
				cur.right = addNode(cur.right, value);
			
			return cur;
		}
	}
	
	static void postorder(TreeNode root) {
		if(root.left != null)
			postorder(root.left);
		
		if(root.right != null)
			postorder(root.right);
		
		System.out.println(root.value);
	}
	

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€