문제
이진 트리의 모든 리프를 왼쪽에서 오른쪽 순서로 고려하면 해당 리프의 값은 리프 값 시퀀스를 형성합니다 .
예를 들어, 위의 주어진 트리에서 리프 값 시퀀스는 입니다 (6, 7, 4, 9, 8).
두 개의 이진 트리는 리프 값 순서가 동일하면 리프 유사로 간주됩니다 .
헤드 노드가 있고 잎이 유사한 true두 개의 주어진 트리가 있는 경우에만 반환합니다 .root1root2
예시 1:
입력: root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null ,null,null,null,9,8]
출력: true
예시 2:
입력: root1 = [1,2,3], root2 = [1,3,2]
출력: false
제약:
- 각 트리의 노드 수는 범위에 속합니다 [1, 200].
- 주어진 트리 모두는 범위 내의 값을 갖습니다 [0, 200].
코드
/**
* 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 {
List<Integer> list1;
List<Integer> list2;
int[] arr1;
int[] arr2;
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
list1 = new ArrayList<>();
list2 = new ArrayList<>();
bfs(root1, list1);
bfs(root2, list2);
arr1 = list1.stream().mapToInt(x->Integer.valueOf(x)).toArray();
arr2 = list2.stream().mapToInt(x->Integer.valueOf(x)).toArray();
return Arrays.equals(arr1,arr2);
}
public void bfs(TreeNode root, List list){
if(root.left == null && root.right == null){
list.add(root.val);
return;
}
if(root.left != null) bfs(root.left,list);
if(root.right != null) bfs(root.right,list);
}
}
'코테 > 알고리즘' 카테고리의 다른 글
[leetcode 75 746.Min Cost Climbing Stairs] - DP, Math.min() (1) | 2024.03.22 |
---|---|
[leetcode 283. Move Zeroes 0으로 이동] - 투포인터 (0) | 2024.02.08 |
[leetcode 841. Keys and Rooms 열쇠의 방] - DFS (0) | 2024.02.08 |
[leetcode 1137. N-th Tribonacci Number N번째 트리보나치 수] - DP (0) | 2024.02.08 |
[ DFS / BFS ] - 여행 경로(DFS) (2) | 2024.01.13 |