【剑指28】对称二叉树

方法一:左右子树是否对称,时间O(n),空间O(n)

题解:对于两个对称的节点有

  1. node1->val == node2->val,两节点值相同
  2. node1->left->val == node1->right->val,node1的左树和node2的右树相同
  3. node1->right->val == node2->left->val,node1的右树和node2的左树相同
    在这里插入图片描述
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    bool isSymmetric(TreeNode* root) 
    {
    
    
        // 1.判断树的左右树是否对称--》判断两颗树是否相同
        // 2.先写出判断两个树是否相同的代码
        // 3.然后修改条件变成判断对称
        if (root == nullptr)
            return true;
        return isSyTree(root->left, root->right);
    }
    bool isSyTree(TreeNode* node1, TreeNode* node2)
    {
    
    
        if (node1 == nullptr && node2 == nullptr)
            return true;
        if (node1 == nullptr || node2 == nullptr || node1->val != node2->val)
            return false;
        return isSyTree(node1->left, node2->right) && isSyTree(node1->right, node2->left);
    }
};

猜你喜欢

转载自blog.csdn.net/qq_45691748/article/details/113852798
今日推荐