[Algorithm] Leetcode_ Symmetric Tree_ C++

JAsmine_log·2024년 5월 26일
0

Symmetric Tree

Problem

Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).

Example 1:

Input: root = [1,2,2,3,4,4,3]
Output: true

Example 2:

Input: root = [1,2,2,null,3,null,3]
Output: false

Constraints:

The number of nodes in the tree is in the range [1, 1000].
-100 <= Node.val <= 100

Follow up:

Could you solve it both recursively and iteratively?

Solution

  • 직관적으로, 아래 값이 대칭이어야 한다
    • left.val==right.val
    • left.left==right.right
    • left.right==right.left

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:
    bool isSymmetricNode(TreeNode *left, TreeNode *right)
    {
        if (left == nullptr && right == nullptr)
            return true;
        if (left == nullptr || right == nullptr)
            return false;
        return (left->val == right->val) && isSymmetricNode(left->left, right->right) && isSymmetricNode(left->right, right->left);
    }

    bool isSymmetric(TreeNode *root)
    {
        if (root == nullptr)
            return true;
        return isSymmetricNode(root->left, root->right);
    }
};
profile
Everyday Research & Development

0개의 댓글

관련 채용 정보