|
| 1 | +// ๋ฌธ์ ํด์ ๋ถํฐ ์๋์ GPT์๊ฒ ๋์์ ์์ฒญ |
| 2 | +// Serialize (์ง๋ ฌํ): ํธ๋ฆฌ๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ณผ์ . |
| 3 | +// Deserialize (์ญ์ง๋ ฌํ): ๋ฌธ์์ด์ ๋ค์ ํธ๋ฆฌ๋ก ๋ณํํ๋ ๊ณผ์ . |
| 4 | +// ํธ๋ฆฌ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ ์ ์๋ ํ์์ด๋ผ๋ฉด ์ด๋ค ๋ฐฉ๋ฒ์ด๋ ๊ฐ๋ฅ. |
| 5 | +// ๐น ํด๊ฒฐ ๋ฐฉ๋ฒ |
| 6 | +// ์ฐ๋ฆฌ๋ BFS(๋๋น ์ฐ์ ํ์)์ ํ(Queue)๋ฅผ ํ์ฉํ ๋ฐฉ์์ ์ฌ์ฉํ ๊ฑฐ์ผ. |
| 7 | +// ์ด ๋ฐฉ์์ ์ ํํ ์ด์ ๋: |
| 8 | + |
| 9 | +// ํธ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์๋ ์ง๋ ฌํํ๊ธฐ ์ฝ๋ค. |
| 10 | +// ๋ฌธ์์ด์ด ์์ฐจ์ ์ผ๋ก ๋ง๋ค์ด์ ธ ์ญ์ง๋ ฌํํ ๋๋ ๋ค์ ์์ฐจ์ ์ผ๋ก ํธ๋ฆฌ๋ฅผ ๋ณต์ํ๊ธฐ ํธํ๋ค. |
| 11 | +public class Codec { |
| 12 | + |
| 13 | + // ์ง๋ ฌํ (Serialize) |
| 14 | + public String serialize(TreeNode root) { |
| 15 | + if (root == null) return "null"; // ๋น ํธ๋ฆฌ ์ฒ๋ฆฌ |
| 16 | + |
| 17 | + StringBuilder sb = new StringBuilder(); |
| 18 | + Queue<TreeNode> queue = new LinkedList<>(); |
| 19 | + queue.offer(root); |
| 20 | + |
| 21 | + while (!queue.isEmpty()) { |
| 22 | + TreeNode node = queue.poll(); |
| 23 | + |
| 24 | + if (node == null) { |
| 25 | + sb.append("null,"); |
| 26 | + } else { |
| 27 | + sb.append(node.val).append(","); |
| 28 | + queue.offer(node.left); |
| 29 | + queue.offer(node.right); |
| 30 | + } |
| 31 | + } |
| 32 | + return sb.toString(); |
| 33 | + } |
| 34 | + |
| 35 | + // ์ญ์ง๋ ฌํ (Deserialize) |
| 36 | + public TreeNode deserialize(String data) { |
| 37 | + if (data.equals("null")) return null; // ๋น ํธ๋ฆฌ ์ฒ๋ฆฌ |
| 38 | + |
| 39 | + String[] values = data.split(","); |
| 40 | + TreeNode root = new TreeNode(Integer.parseInt(values[0])); |
| 41 | + Queue<TreeNode> queue = new LinkedList<>(); |
| 42 | + queue.offer(root); |
| 43 | + |
| 44 | + int i = 1; |
| 45 | + while (!queue.isEmpty()) { |
| 46 | + TreeNode node = queue.poll(); |
| 47 | + |
| 48 | + if (!values[i].equals("null")) { |
| 49 | + node.left = new TreeNode(Integer.parseInt(values[i])); |
| 50 | + queue.offer(node.left); |
| 51 | + } |
| 52 | + i++; |
| 53 | + |
| 54 | + if (!values[i].equals("null")) { |
| 55 | + node.right = new TreeNode(Integer.parseInt(values[i])); |
| 56 | + queue.offer(node.right); |
| 57 | + } |
| 58 | + i++; |
| 59 | + } |
| 60 | + return root; |
| 61 | + } |
| 62 | +} |
| 63 | + |
| 64 | +// ํธ๋ฆฌ๋ ๋๋ถ๋ถ DFS๋ก ํด๊ฒฐํ์ด์ ๋น์ทํ ๋ฐฉ์์ ์๊ฐํ์ผ๋ ๊ตฌํ ์คํจ |
| 65 | +// GPT์๊ฒ ์ด์ด์ ์์
์ ํ๊ณ O(N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ์ป์. ๊ทธ๋ฌ๋ ์์ BFS๋ณด๋ค ์๋๊ฐ ๋๋ฆผ |
| 66 | +class Codec { |
| 67 | + // ๐น DFS ๊ธฐ๋ฐ ์ง๋ ฌํ (Serialize) |
| 68 | + public String serialize(TreeNode root) { |
| 69 | + if (root == null) return "null"; |
| 70 | + return root.val + "," + serialize(root.left) + "," + serialize(root.right); |
| 71 | + } |
| 72 | + |
| 73 | + // ๐น DFS ๊ธฐ๋ฐ ์ญ์ง๋ ฌํ (Deserialize) |
| 74 | + public TreeNode deserialize(String data) { |
| 75 | + Queue<String> nodes = new LinkedList<>(Arrays.asList(data.split(","))); |
| 76 | + return buildTree(nodes); |
| 77 | + } |
| 78 | + |
| 79 | + private TreeNode buildTree(Queue<String> nodes) { |
| 80 | + String val = nodes.poll(); |
| 81 | + if (val.equals("null")) return null; |
| 82 | + |
| 83 | + TreeNode node = new TreeNode(Integer.parseInt(val)); |
| 84 | + node.left = buildTree(nodes); |
| 85 | + node.right = buildTree(nodes); |
| 86 | + return node; |
| 87 | + } |
| 88 | +} |
0 commit comments