본문 바로가기

Algorithm20

103. Binary Tree Zigzag Level Order Traversal 문제 이진 트리가 주어졌을때 트리를 오른쪽 -> 왼쪽으로, 다시 왼쪽에서 -> 오른쪽으로 번갈아 가면서 순회하도록 구현하는 문제입니다. 예를 들어 아래와 같은 이진 트리가 주어졌을때, 3 -> 20, 9 -> 15, 7 처럼 순회한 결과를 리스트에 담아 리턴해야 합니다. 문제 풀이 public List zigzagLevelOrder(TreeNode root) { List result = new ArrayList(); if(root == null) return result; Queue q = new LinkedList(); q.offer(root); int zigzag = 0; // 0:R, 1:L while(!q.isEmpty()) { int size = q.size(); List temp = new A.. 2024. 1. 4.
199. Binary Tree Right Side View 문제 이진트리가 주어졌을때 오른쪽 사이드에서 트리를 바라볼때 보이는 원소를 리스트에 담아서 리턴하는 문제입니다. 위와 같이 오른쪽 사이드에서는 1, 3, 4 의 원소가 보이기 때문에 1, 3, 4를 리스트에 담아서 리턴하면 됩니다. 만약 5의 자식 노드로 7이 추가되었다고 가정했을때는 1, 3, 4, 7이 보이기 때문에 7 원소도 같이 담아서 리턴해야합니다. 문제 풀이 map 을 이용한 풀이와 단순이 list 만을 이용한 풀이가 있습니다. (다른 방법도 있겠지만 2개의 방법만 작성하겠습니다.) 1. list 를 이용한 풀이 public List rightSideView(TreeNode root) { List list = new ArrayList(); preorder(root, list, 0); retur.. 2024. 1. 2.
2. Add Two Numbers 문제 Linked List 로 구성된 2개의 값이 주어졌을때 두 Linked List 의 원소를 합친 결과를 리턴하는 문제입니다. 각 원소는 0 이상 9 이하의 한자리수 값이 존재합니다. (0 3 L2 : 5 -> 6 -> 4 Result : 7 -> 0 -> 8 문제 풀이 public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(-1); ListNode node = dummy; int temp = 0; while(l1 != null || l2 != null || temp > 0) { if(l1 != null) { temp += l1.val; l1 = l1.next; } if(l2 != nul.. 2024. 1. 1.
236. Lowest Common Ancestor of a Binary Tree 문제 이진트리의 루트노드와 2개의 노드가 주어졌을때 2개의 노드가 갖는 공통 조상을 찾는 문제입니다. 예를들어, 아래 이미지에서 p=5와 q=1 이라는 2개의 노드가 주어졌을때 공통 조상은 3 으로 3 노드를 리턴하면 됩니다. 문제 풀이 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null || p == root || q == root) return root; TreeNode left = lowestCommonAncestor(root.left, p, q); TreeNode right = lowestCommonAncestor(root.right, p, q); if(left == null) re.. 2023. 12. 31.