题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
// bool recursion(TreeNode* root1, TreeNode* root2){
// // 可以两个都为空
// if(!root1 && !root2)
// return true;
// // 只有一个为空或者节点值不同,必定不对称
// if(!root1 || !root2 || root1->val != root2->val)
// return false;
// // 每层对应的节点进入递归
// return recursion(root1->left, root2->right) && recursion(root1->right, root2->left);
// }
bool compare(TreeNode* left, TreeNode* right){
// 首先排除空节点的情况
if(!left && right) return false;
else if(left && !right) return false;
else if(!left && !right) return true;
// 排除了空节点,再排除值不相同的情况
else if(left->val != right->val) return false;
// 此时就是,左右节点都不为空,且数值相同的情况
// 此时做递归,做下一次判断
bool outside = compare(left->left, right->right); // 左子树:左 右子树:右
bool inside = compare(left->right, right->left); // 左子树:右 右子树:左
bool issame = outside && inside;
return issame;
}
bool isSymmetrical(TreeNode* pRoot) {
// return recursion(pRoot, pRoot);
if(!pRoot) return true;
return compare(pRoot->left, pRoot->right);
}
};
来自《代码随想录》~~~

