[LeetCode] Leaf-Similar Trees

준규·2022년 9월 30일
0

binary tree 의 이파리 노드들을 생각할 때 왼쪽에서 오른쪽 순서로 이파리 노드들의 순서를 leaf value sequence 라고 한다

예를 들어 위 트리의 이파리노드들의 leaf value sequence는 (6, 7, 4, 9, 8) 이 된다고 한다

두개의 binary tree가 주어질 때 leaf value sequence가 같으면 true를 반환 하는 문제이다

Example 을 보자

만약 2번 예시와 같이 [2, 3] , [3, 2] 순서가 다르다면 false를 리턴해야 한다

const leafSimilar = function (root1, root2) {
  let leaf1 = [];
  let leaf2 = [];

  const helper = (root, array) => {
    if (root) {
      if (root.right === null && root.left === null) {
        return array.push(root.val);
      }
      helper(root.left, array);
      helper(root.right, array);
    }
  };

  helper(root1, leaf1);
  helper(root2, leaf2);

  return leaf1.toString() === leaf2.toString() ? true : false;
};

먼저 helper 함수를 만들기로 했다

helper 함수는 root 와 array를 파라미터로 받는데 현재 노드가 null이 아닐 때 현재 노드가 이파리 노드라면 array에 push를 해주기로 했고 만약 이파리노드가 아니라면 현재 노드의 왼쪽 자식과 오른쪽 자식을 root로 재귀를 돌려주기로 했다

helper 함수에 파라미터로 root1, leaf1 , root2, leaf2 를 넣어주어 각 트리의 이파리 노드의 leaf value sequence 배열을 만들어 주었다

그 다음 두 배열을 비교하여 같으면 true 틀리면 false를 리턴해준다

배열은 비교를 할때 toString 메소드를 사용하여 문자열로 바꾼뒤에 해주었다. 그대로 배열끼리 비교를 해버리면 주소값을 비교하기 때문에 무조건 false가 나온다

submit을 해보니

정답이었다!

profile
안녕하세요 :)

0개의 댓글