方法一:左右子树是否对称,时间O(n),空间O(n)
题解:对于两个对称的节点有
- node1->val == node2->val,两节点值相同
- node1->left->val == node1->right->val,node1的左树和node2的右树相同
- 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);
}
};