实际要比较的是左右子树是否可以翻转。
- 同时遍历左右子树
- 采用先序遍历,左子树是中左右,右子树是中右左
- 比较是否相等,相等则继续遍历,不等则返回false
- 判断终止条件
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pRoot TreeNode类 * @return bool布尔型 */ bool isSymmetrical(TreeNode* pRoot) { // write code here if(pRoot == nullptr) return true; return compare(pRoot->left, pRoot->right); } private: bool compare(TreeNode* left,TreeNode* right) { //终止条件 if(left == nullptr && right == nullptr) return true; else if (left == nullptr && right != nullptr) return false; else if (left != nullptr && right == nullptr) return false; //left != right终止返回 else if (left->val != right->val) return false; //此时是左右节点不为空,且相等的情况 //递推公式 bool flag1 = compare(left->left, right->right); bool flag2 = compare(left->right, right->left); //本级函数 return flag1 && flag2; } };