본문 바로가기

Algorithm/LeetCode

[c++] leetcode 101. Symmetric Tree

왼쪽 child와 오른쪽 child가 서로 대칭인지 확인하는 문제이다.

대칭을 확인하는 코드를 구현하는 것이 다소 복잡할 것이라고 생각해서, 오른쪽 child를 대칭시키고, 대칭시킨 오른쪽 child가 왼쪽 child와 동일한지 확인하는 코드를 작성하였다.

convert는 어떤 TreeNode를 대칭시키는 함수이다.
isSameTreeNode는 어떤 두 TreeNode가 같은지 다른지 확인하는 함수이다.

class Solution
{
public:
    void convert(TreeNode *root)
    {
        if (root == nullptr)
            return;
        TreeNode *tmp = root->left;
        root->left = root->right;
        root->right = tmp;
        convert(root->left);
        convert(root->right);
    }
    bool isSameTreeNode(TreeNode *a, TreeNode *b)
    {
        if (a == nullptr && b == nullptr)
            return true;
        else if (a == nullptr && b != nullptr)
            return false;
        else if (a != nullptr && b == nullptr)
            return false;
        bool isSame = true;
        if (a->val == b->val)
        {
            isSame &= isSameTreeNode(a->left, b->left);
            isSame &= isSameTreeNode(a->right, b->right);
        }
        else
        {
            isSame = false;
        }
        return isSame;
    }
    bool isSymmetric(TreeNode *root)
    {
        convert(root->right);
        return isSameTreeNode(root->left, root->right);
    }
};
반응형