반응형
Recent Posts
Notice
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- string
- leetcode
- PCCP
- programmers
- 부분배열
- 재귀함수
- Java
- Array
- coding
- recursion
- 브루트포스
- 우선순위 큐
- dfs
- priority queue
- hashset
- 깊이우선탐색
- ArrayList
- binary tree
- DP
- 리트코드
- Algorithm
- greedy
- HashMap
- two pointers
- 알고리즘
Archives
- Today
- Total
지식창고
[Java] LeetCode 101. Symmetric Tree 본문
728x90
반응형
[Java] LeetCode 101. Symmetric Tree
문 제 :
이진트리(Binary Tree) root가 주어진다.
해당 Tree가 좌우대칭인지 구별해라. (Mirror)
/**
* 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;
* }
* }
*/
Example )
Input: root = [1,2,2,3,4,4,3]
Output: true
//////////////////////////////
Input: root = [1,2,2,null,3,null,3]
Output: false
접 근 :
DFS를 활용해 재귀함수로 접근
해 결 :
주어진 노드의 왼쪽과 오른쪽으로 나누어 생각한다.
거울과 같이 좌우 대칭이 되려면
왼쪽의 왼쪽과 오른쪽의 오른쪽이 같아야 한다.
왼쪽의 오른쪽과 오른쪽의 왼쪽이 같아야 한다.
주어진 root 가 null인지 확인한다.
if(root == null) return true;
Tree의 left와 right를 비교한다.
만약 둘 다 비어있다면 대칭이다.
만약 둘 중에 하나만 비어 있다면 비대칭이다.
만약 둘의 값(value)이 다르면 비대칭이다.
// TreeNode left, right
if(left == null && right == null) return true;
if(left == null || right == null) return false;
if(left.val != right.val) return false;
Tree가 대칭이 되려면
왼쪽의 왼쪽과 오른쪽의 오른쪽이 같아야 한다.
왼쪽의 오른쪽과 오른쪽의 왼쪽이 같아야 한다.
※ 둘 중에 하나라도 같지 않으면 대칭이 아니다.
이것을 재귀적으로 호출해준다.
return result(left.left, right.right) && result(left.right, right.left);
결 과 :
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
return result(root.left, root.right);
}
public boolean result(TreeNode left, TreeNode right){
if(left == null && right == null) return true;
if(left == null || right == null) return false;
if(left.val != right.val) return false;
return result(left.left, right.right) && result(left.right, right.left);
}
}
728x90
반응형
'Algorithm > Leetcode' 카테고리의 다른 글
[Java] LeetCode 57. Insert Interval (0) | 2023.01.16 |
---|---|
[Java] LeetCode 1061. Lexicographically Smallest Equivalent String (0) | 2023.01.14 |
[Java] LeetCode 100. Same Tree (1) | 2023.01.10 |
[Java] LeetCode 144. Binary Tree Preorder Traversal (0) | 2023.01.09 |
[Java] LeetCode 149. Max Points on a Line (0) | 2023.01.09 |
Comments