101. 对称二叉树
给你一个二叉树的根节点 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
解题思路
递归:
首先创建一个返回为布尔类型的check函数,然后isSymmetric调用check函数,然后再利用递归函数来判断一个数是否是对称二叉树,判断的是左右节点。
- 若左右节点都为空,对称,返回true
- 若左节点为空,右节点不为空,不对称,返回false;若左不为空,右为空,不对称,返回false
- 若左右节点都不为空的情况时,判断节点的值是否相等,调用check函数判断左节点的左子树和右节点的右子树,再调用check函数判断左节点的右子树和右节点的左子树
C语言
bool check(struct TreeNode* t1, struct TreeNode* t2){
if(t1 == NULL && t2 == NULL) return true;
if(t1 == NULL || t2 == NULL) return false;
return (t1 -> val == t2 -> val) && check(t1 -> left, t2 -> right) && check(t1 -> right, t2 -> left);
}
bool isSymmetric(struct TreeNode* root) {
//满足对称的条件,根节点的值相等,每棵树的右子树均与另一棵树的左子树对称
return check(root, root);
}
Java
class Solution {
public boolean isSymmetric(TreeNode root) {
return check(root,root);
}
public boolean check(TreeNode q,TreeNode p){
if(p == null && q == null){
return true;
}
if(p == null || q == null){
return false;
}
return (p.val == q.val)&&check(p.left,q.right)&&check(p.right,q.left);
}
}