力扣101. 对称二叉树

递归

  • 思路:
    • 克隆这棵树,递归比较左右子树互为镜像;
    • 终止条件为:
      • 都为nullptr,则返回 true;
      • 有一个为 nullptr,则返回 false;(形状不一致)
      • 形状一致情况下,值要相等、原左子树与镜像右子树、原右子树与镜像左子树也应该互为镜像递归;
/**
 * 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 isSymmetric(TreeNode* root) {
        return check(root, root);
    }

private:
    
    bool check(TreeNode* o, TreeNode* m) {
        if ((o == nullptr) && (m == nullptr)) {
            return true;
        } else if ((o == nullptr) || (m == nullptr)) {
            return false;
        }

        return (o->val == m->val) && check(o->left, m->right) && check(o->right, m->left);
    }
};

你可能感兴趣的:(力扣实践,leetcode,算法,职场和发展)