#include <stdbool.h> bool isSame(struct TreeNode* root1, struct TreeNode* root2) { if(root1 == NULL && root2 == NULL) return true; if(root1 == NULL || root2 == NULL) return false; if(root1->val != root2->val) return false; return isSame(root1->left, root2->right) && isSame(root1->right , root2->left); } bool isSymmetrical(struct TreeNode* pRoot ) { return isSame(pRoot, pRoot); }
1.左右是否均为空。均为空表示对称。
2.除开1的情况,左右是否有一个为空。只要有一个为空,则必不对称。
3.除开1,2的情况,那么左右必均不为空,那么检查值是否相等,不相等则必不对称。
4.除开1,2,3的情况,那么左右两个值相等,就继续判断其左右孩子是否对称,
即左边的左孩子与右边的右孩子是否相等,左边的右孩子和右边的左孩子是否相等。相等则对称