문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
두 개의 이진 트리 p와 q가 주어졌을 때, 두 트리가 같은지 아닌지 확인하는 함수를 작성해라.
두 이진 트리는 구조가 동일하고, 노드의 값이 같다면 동일하다고 간주한다.
#1
Input: p = [1, 2, 3], q = [1, 2, 3]
Output: true
#2
Input: p = [1, 2], q = [1, null, 2]
Output: false
#3
Input: p = [1, 2, 1], q = [1, 1, 2]
Output: fasle
이 문제에서도 TreeNode 클래스를 주석으로 나타내고 있다.
/**
* 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;
* }
* }
*/
class Soultion {
public boolean isSameTree(TreeNode p, TreeNode q) {
}
}
매개변수로 TreeNode p, TreeNode q가 주어진다. 먼저 p와 q가 null인지 확인한다. 둘 중 하나라도 null이면 두 트리가 같지 않기 때문이다.
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null){
return true;
}else if(p == null || q == null){
return false;
}
}
이 경우가 통과될 경우 각 노드의 val을 비교해서 같다면 isSameTree를 다시 호출하여 두 트리의 각각 왼쪽, 오른쪽 노드를 비교한다.
if(p.val == q.val){
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}else{
return false;
}
/**
* 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;
* }
* }
*/
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null){
return true;
}else if(p == null || q == null){
return false;
}
if(p.val == q.val){
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}else{
return false;
}
}
}