对称二叉树
描述
给定一个二叉树,检查它是否是镜像对称的。
样例
例如:二叉树[1,2,2,3,4,4,3]是对称二叉树
二叉树[1,2,2,null,3,null,3]不是对称二叉树
原题链接
分析
1.构成对称二叉树的条件
对称树中两个对称节点 node1、node2,满足:
- node1.val = node2.val
- node1.left.val = node2.right.val
- node1.right.val = node2.left.val
需要对树中的每对节点 进行上述条件的判断,三个条件都满足,即为对称二叉树。
return node1.val == node2.val && dfs(node1.left,node2.right) &&dfs(node1.right,node2.left)
2.递归终止的条件
- 左右节点为空,即都是叶子了仍然满足上述条件
- 左右节点有一个不为空、另一个为空
- 左右节点的值不相等
3.递归的内容
- 判断传入的两节点是否都为叶子节点
- 判断传入的节点的值是否相等
- 判断传入的两节点是否左右对称
实现
public class T28 {
public static boolean isSymmetric0(TreeNode root) {
if (root==null){
return true;
}
return dfs(root.left,root.right);
}
private static boolean dfs(TreeNode r1, TreeNode r2) {
if (r1 ==null && r2 ==null){
return true;
}
if (r1 ==null || r2 ==null){
return false;
}
return r1.val== r2.val && dfs(r1.left, r2.right) && dfs(r1.right,r2.left);
}