对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
解题思路:
- 1 分解思路,后序遍历
- 2 先判断左右子树是否对称,再判断根节点是否对称
- 3 判断对称二叉树的经典步骤
- 3.1 判断左右孩子为空的情况
- 3.2 判断左右孩子值不相等的情况
- 3.3 判断左->左孩子和右->右孩子相等的情况
- 3.4 判断左->右孩子和右->左孩子相等的情况
class Solution {
public:
bool compare(TreeNode* left, TreeNode* right){
// 1 判断空
if(left != nullptr && right == nullptr) return false;
else if(left == nullptr && right != nullptr) return false;
else if (left == nullptr && right == nullptr) return true;
// 2 判断左右孩子的值是否相等
else if (left->val != right->val) return false;
// 3 left->left VS right->right
int outside = compare(left->left, right->right);
// 4 left->right VS right->left
int inside = compare(left->right, right->left);
int same = outside && inside;
return same;
}
bool isSymmetric(TreeNode* root) {
if (root == nullptr) return true;
return compare(root->left, root->right);
}
};