From fce43edf49bf3643bf266ffd839fa182068e10cc Mon Sep 17 00:00:00 2001 From: rivkode Date: Fri, 20 Feb 2026 22:26:37 +0900 Subject: [PATCH] rivkode construct binary tree pre and inorder --- .../rivkode.java | 51 +++++++++++++++++++ counting-bits/rivkode.java | 42 +++++++-------- 2 files changed, 72 insertions(+), 21 deletions(-) create mode 100644 construct-binary-tree-from-preorder-and-inorder-traversal/rivkode.java diff --git a/construct-binary-tree-from-preorder-and-inorder-traversal/rivkode.java b/construct-binary-tree-from-preorder-and-inorder-traversal/rivkode.java new file mode 100644 index 000000000..085b41443 --- /dev/null +++ b/construct-binary-tree-from-preorder-and-inorder-traversal/rivkode.java @@ -0,0 +1,51 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ + +import java.util.*; + +class Solution { + private int preIdx = 0; + private Map inPos = new HashMap<>(); + + public TreeNode buildTree(int[] preorder, int[] inorder) { + // inorder 값의 위치를 미리 저장: value -> index + for (int i = 0; i < inorder.length; i++) { + inPos.put(inorder[i], i); + } + + return build(preorder, 0, inorder.length - 1); + } + + private TreeNode build(int[] preorder, int inLeft, int inRight) { + // inorder 구간이 비면 서브트리 없음 + if (inLeft > inRight) return null; + + // preorder에서 현재 루트 꺼내기 + int rootVal = preorder[preIdx++]; + TreeNode root = new TreeNode(rootVal); + + // inorder에서 루트 위치 찾기 + int k = inPos.get(rootVal); + + // 왼쪽 서브트리: inorder[inLeft .. k-1] + root.left = build(preorder, inLeft, k - 1); + + // 오른쪽 서브트리: inorder[k+1 .. inRight] + root.right = build(preorder, k + 1, inRight); + + return root; + } +} diff --git a/counting-bits/rivkode.java b/counting-bits/rivkode.java index cadc86862..aa7fceb19 100644 --- a/counting-bits/rivkode.java +++ b/counting-bits/rivkode.java @@ -27,26 +27,26 @@ public int[] countBits(int n) { 입력받은 n에 대해 toBinaryString() 을 사용하여 binaryString 값을 알아낸뒤 charAt()으로 각 인덱스별 접근하여 1의 개수를 찾아내는 방식이다. */ -class Solution { - public int[] countBits(int n) { - int[] answer = new int[n + 1]; - for (int i=0; i