递归解决
1.确定递归函数的参数和返回值
由题目:判断:bool;
参数:比较两个树 左子树节点 右子树节点
bool compare (TreeNode* left,TreeNode* right)
2.确定终止条件:
先比形状 再比数值:
左空右不空 return false;
if(left==NULL&&right!=NULL)return false;
右空左不空 return false;
else if(left!=NULL&&right==NULL)return false;
左右都空 return true;
else if(left==NULL&&right==NULL)return true;
左右都不空 比数值不同
else if(lefy->val!=right->val)return false;
剩下对称情况
3.确定单层递归的逻辑
比较外侧是否对称 传入的左节点的左孩子与右节点的右孩子
bool outside=compare(left->left,right->right);
比较内侧是否对称 传入的左节点右孩子与右节点的左孩子
bool inside=compare(left->right,right->left);
内外对称就true
bool isSame=outside&&inside;
return isSame;
4.总体:
class Solution {
public:
bool compare(TreeNode* left, TreeNode* right) {
if (left == NULL && right != NULL) return false;
else if (left != NULL && right == NULL) return false;
else if (left == NULL && right == NULL) 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 isSymmetric(TreeNode* root) {
if(root==NULL)return true;
else return compare(root->left,root->right);
}
};