难度简单2059
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false提示:
- 树中节点数目在范围
[1, 1000]内 -100 <= Node.val <= 100
思路一:
这道题他给的oj函数是这样子的:
bool isSymmetric(TreeNode* root) {
}但是我们要去递归的是他的左右子树去比,如果参数只有一个,那我们没办法做到每次递归的时候传递左右子树呀!
所以我们得多给一个函数,叫做 _isSymmetric 吧!他的参数有两个,一个是左节点,一个是右节点!
除此之外,这道题与相同的树这道题是很像的,判断两个数是否对称,其实就是判断两个子树是不是相同,不同的是传的节点b'y'y!
class Solution {
public:
bool _isSymmetric(TreeNode* left, TreeNode* right)
{
//两个都为空则对称
if(left == nullptr && right == nullptr)
return true;
//其中有一个为空,不对称
if(left == nullptr || right == nullptr)
return false;
//两个都不为空,值不同则不对称
if(left->val != right->val)
return false;
//继续递归到左右子树的左节点和右节点,注意是对称的节点比较
return _isSymmetric(left->left, right->right) &&
_isSymmetric(left->right, right->left);
}
bool isSymmetric(TreeNode* root) {
if(root == nullptr)
return true;
return _isSymmetric(root->left, root->right); //交给子函数去递归
}
};思路二:
其实我们可以直接将树翻转,然后看看翻转前和翻转后的树是不是相同,若相同则为对称的二叉树
代码省略。。。