Programming/LeetCode
[Dart] 872. Leaf-Similar Trees
Meezzi
2025. 4. 23. 09:36
728x90
1. 문제
2. 요구사항
1) 두 개의 이진 트리 root1과 root2가 주어진다.
2) 이 두 개의 이진 트리가 leaf-similar 트리인지 확인한다.
3) leaf-similar 트리란 두 트리의 리프 노드들이 왼쪽에서 오른쪽 순서로 동일한 값을 가지는 것을 의미한다.
4) 리프 노드란 자식이 없는 노드이다.
3. 코드
/**
* Definition for a binary tree node.
* class TreeNode {
* int val;
* TreeNode? left;
* TreeNode? right;
* TreeNode([this.val = 0, this.left, this.right]);
* }
*/
class Solution {
/// 두 개의 이진 트리의 리프 노드가 같은지 비교
bool leafSimilar(TreeNode? root1, TreeNode? root2) {
List<int> list1 = searchLeafTree(root1); // 첫 번째 트리의 리프 노드 리스트
List<int> list2 = searchLeafTree(root2); // 두 번째 트리의 리프 노드 리스트
// 길이가 다르면 false
if (list1.length != list2.length) return false;
// 값 비교
for (int i = 0; i < list1.length; i++) {
if (list1[i] != list2[i]) return false;
}
return true;
}
/// 이진 트리에서 리프 노드들의 값을 리스트로 반환
List<int> searchLeafTree(TreeNode? root) {
List<int> leafNodeList = [];
// DFS(깊이 우선 탐색) 재귀 함수
void dfs(TreeNode? node) {
if (node == null) return;
// 리프 노드일 경우 리스트에 추가
if (node.left == null && node.right == null) {
leafNodeList.add(node.val);
}
// 좌우 자식 순회
dfs(node.left);
dfs(node.right);
}
dfs(root);
return leafNodeList;
}
}
728x90