请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

解法一:
bool compareTree(TreeNode *A, TreeNode *B) {
if(nullptr == A && nullptr == B)
return true;
if(nullptr == A || nullptr == B)
return false;
bool c = A->val == B->val;
bool l = compareTree(A->left, B->left);
bool r = compareTree(A->right, B->right);
return c && l && r;
}
TreeNode *mirrorTree(TreeNode *root) {
if(nullptr == root)
return nullptr;
TreeNode *tmpNode = root->right;
root->right = mirrorTree(root->left);
root->left = mirrorTree(tmpNode);
return root;
}
bool isSymmetric(TreeNode* root) {
if(nullptr == root)
return true;
TreeNode *A = root->left;
TreeNode *B = mirrorTree(root->right);
return compareTree(A, B);
}
解法二:优化方法
bool compareTree(TreeNode *A, TreeNode *B) {
if(nullptr == A && nullptr == B)
return true;
if(nullptr == A || nullptr == B)
return false;
bool c = A->val == B->val;
bool l = compareTree(A->right, B->left);
bool r = compareTree(A->left, B->right);
return c && l && r;
}
bool isSymmetric(TreeNode* root) {
if(nullptr == root)
return true;
return compareTree(root->left, root->right);
}


255

被折叠的 条评论
为什么被折叠?



