두 갈래 나무가 같은지 여부(귀속판)

2857 단어
제목:
두 개의 두 갈래 나무를 정해서 함수를 만들어서 그것들이 같은지 확인하세요.만약 두 나무가 구조적으로 같고 노드가 같은 값을 가지고 있다면 그것들은 같다고 여긴다.예시 1: 입력: 1/\/\2 3 2 3 [1,2,3], [1,2,3] 출력: true 예시 2: 입력: 1/\2 2 [1,2],[1,null,2] 출력: false 예 3: 입력: 1/\/\2 1 2 1 2 [1,2,1], [1,1,2] 출력: false 출처: 리코드(LeetCode) 링크:https://leetcode-cn.com/problems/same-tree저작권은 인터넷 소유에 귀속된다.상업 전재는 정부에 연락하여 권한을 부여하고, 비상업 전재는 출처를 명시해 주십시오.
분석:
이 제목을 보고 나의 첫 반응은 여전히 귀착되었다. 어쩔 수 없이 최근에 귀착을 사랑하게 되었고 무한진향 순환에 빠져서 헤어나올 수 없었다.
나의 사고방식은 먼저 두 갈래 나무의 꼭대기 노드를 비교하는 것이다. 만약에 두 갈래 나무가 모두null이라면 계속 비교할 필요가 없다.true로 되돌아간다.만약 두 개의 두 갈래 나무가null이 아니라면 양자의 노드 값을 비교해 보세요. 만약 값이 같다면 상관하지 마세요. 만약 다르다면 계속 비교할 필요가 없습니다. 직접false로 돌아갑니다.마지막으로 상기에서 언급한 세 개의 리턴 중 어느 하나라도 실행 조건을 만족시키지 못하면 두 노드의 좌우 하위 노드를 귀속 방법으로 전송하여 다음 라운드를 비교한다.
최종적으로 임의의 두 위치의 노드가 다르면 최종 결과는 반드시false(코드 참조)이다.
문제:
 
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        return check(p, q);
    }

    public boolean check(TreeNode p, TreeNode q) {
        if (p == null && q == null) {
            return true;
        }
        if (p != null && q != null) {
            if (p.val != q.val) {
                return false;
            }
        } else {
            return false;
        }
        return check(p.left, q.left) && check(p.right, q.right);
    }
}

좋은 웹페이지 즐겨찾기