본문 바로가기

Algorithm/자료구조

(C++) - LeetCode (easy) 572. Subtree of Another Tree

반응형

https://leetcode.com/problems/subtree-of-another-tree/description/

 

Subtree of Another Tree - LeetCode

Can you solve this real interview question? Subtree of Another Tree - Given the roots of two binary trees root and subRoot, return true if there is a subtree of root with the same structure and node values of subRoot and false otherwise. A subtree of a bin

leetcode.com

tree 순회 문제였습니다.

📕 풀이방법

📔 풀이과정

1. 재귀적으로 root의 원소 모두를 순회해줍니다.2. root->val과 subRoot->val이 같다면 subTree인지 여부를 검사하는 함수 getPreOrdered를 수행합니다. 3. preOrder로 각 tree를 순회한 원소 정보를 vector에 담아 반환하는 함수입니다. root와 subRoot에 대한 vector를 얻어 낸 뒤 둘이 같다면 true를 반환해줍니다.

📔 정답 출력 | 반환

모든 원소에 대해 재귀적으로 수행된 isSubTree함수의 최댓값 정답으로 반환합니다


📕 Code

📔 C++

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector <int> getPreOrdered(TreeNode* tree){
        if(tree == NULL) return vector<int>();
        vector<int> left = getPreOrdered(tree->left);
        left.push_back(tree->val);
        vector<int> right = getPreOrdered(tree->right);
        left.insert(left.end(), right.begin(), right.end());
        return left;
    }
    bool isSubtree(TreeNode* root, TreeNode* subRoot) {
        if(root == NULL) return false;
        if(root->val == subRoot->val) {
            vector <int> v = getPreOrdered(root);
            vector <int> v1 = getPreOrdered(subRoot);
            if(v == v1) return true;
        }
        return max(isSubtree(root->left, subRoot), isSubtree(root->right, subRoot));
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.