递归判断一下
节点如下:
a
b c
d e f g
a的左子树值要等于a的右子树c
b的左子树要等于c的子树 b的右子树要等于c的左子树
以此循环下去
函数如下:
bool check(TreeNode * left,TreeNode * right) { //左右都为空可以判为对称,左右单个为空肯定就不对称了,都不为空就回调 if(left == nullptr ) { if(right == nullptr) return true; else return false; } else{ if(right == nullptr) return false; } if(left->val==right->val) return(check(left->left,right->right)&&check(left->right, right->left)); else return false; }
完整代码
class Solution { public: bool check(TreeNode * left,TreeNode * right) { //左右都为空可以判为对称,左右单个为空肯定就不对称了,都不为空就回调 if(left == nullptr ) { if(right == nullptr) return true; else return false; } else{ if(right == nullptr) return false; } if(left->val==right->val) return(check(left->left,right->right)&&check(left->right, right->left)); else return false; } bool isSymmetrical(TreeNode* pRoot) { if(pRoot == nullptr) return true; TreeNode * left=pRoot->left; TreeNode * right=pRoot->right; return check(left, right); } };