?做题思路or感想:
- 这题是要同时遍历左子树和右子树
- 遍历左子树的外侧和右子树的外侧
- 遍历左子树的内侧和右子树的内侧
- 最后判读是否外侧和内侧都是对称的
class Solution {
public:
bool dfs(TreeNode* left, TreeNode* right) {
//处理左右节点有空节点的情况,实际上也是处理递归到尽头时的情况,到尽头是就要触底反弹,返回值了
if (left != nullptr && right == nullptr)return false;
else if (left == nullptr && right != nullptr)return false;
else if (left == nullptr && right == nullptr)return true;
else if (left->val != right->val)return false;
bool leftTree = dfs(left->left, right->right); //遍历外侧
bool rightTree = dfs(left->right, right->left); //遍历内侧
return leftTree && rightTree; //看外侧和内侧是否都对称
}
bool isSymmetric(TreeNode* root) {
if (root == nullptr)return true;
return dfs(root->left, root->right);
}
};