请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
解题思路:同时比较两个节点,如果1.两个节点都为空,返回true。2.两个节点其中一个空,返回false。3.都不空,但是数值不一样,返回false。4.都不空,数值相同,继续判断。
判断1.左节点的left,右节点的right。2.左节点的right,右节点的left。
class Solution {
public:
vector<int> dfsleft;
vector<int> dfsright;
bool isSymmetric(TreeNode* root)
{
if(root == nullptr) return true;
return compare(root->left,root->right);
}
bool compare(TreeNode* leftnode, TreeNode* rightnode)
{
if(leftnode == nullptr && rightnode == nullptr) return true;
else if(leftnode != nullptr && rightnode == nullptr) return false;
else if(leftnode == nullptr && rightnode != nullptr) return false;
else if(leftnode -> val != rightnode -> val) return false;
bool outside = compare(leftnode->left,rightnode->right);
bool inside = compare(leftnode->right,rightnode->left);
bool issame = outside && inside;
return issame;
}
};