题目描述
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入: root = [1,2,2,3,4,4,3]
输出: true
示例 2:
输入: root = [1,2,2,null,3,null,3]
输出: false
分析
-
首先确定递归函数的返回类型以及参数
我们是要对树进行深度优先遍历,需要对同一层对称位置的两个节点进行比较,所以参数是两个TreeNode,返回值自然就是bool类型。
-
确定终止条件
当节点为空时,会出现以下几种情况:
- 左右节点都为空,return true;
- 左右节点有且只有一个不为空,return false;
- 左右节点都不为空,此时需要对左右节点的值进行判断。
-
确定单层的递归逻辑
对终止条件完成后,可以进入到对单层的递归逻辑中,我们需要对当前节点进行上述判断,不过我们传入的节点需要是对称位置的节点。
代码实现
bool isSym(struct TreeNode* left,struct TreeNode* right){
if(left == NULL && right == NULL) return true;
else if(left == NULL || right == NULL) return false;
else if(left->val != right->val) return false;
else{
return isSym(left->left,right->right) && isSym(left->right,right->left);
}
}
bool isSymmetric(struct TreeNode* root){
return isSym(root->left,root->right);
}