LC-对称二叉树
链接:https://leetcode.cn/problems/symmetric-tree/description/
描述:给你一个二叉树的根节点 root , 检查它是否轴对称。
例1:
输入:root = [1,2,2,3,4,4,3]
输出:true
例2:
输入:root = [1,2,2,null,3,null,3]
输出:false
思路:递归去对比。以例1为例,想要树是对称的,是对于根节点1来说,左2应该等于右2;等于左2跟右2来说,左2的左3是等于右2的右3,左2的右4等于右2的左4,依次类推。
代码如下:
public boolean isSymmetric(TreeNode root) {
//等于根节点特殊情况的处理
//如果节点的左节点和右节点不同时为空,则不是对称的
if (root.left == null && root.right != null) {
return false;
}
if (root.right == null && root.left != null) {
return false;
}
//左右节点同时为空,认为是对称的
if (root.left == null && root.right == null) {
return true;
}
return f(root.left, root.right);
}
private boolean f(TreeNode left, TreeNode right) {
//如果左右有一个为空,则返回另外一个节点是否为空,如果同时为空,则返回true
if (left == null) {
return right == null;
}
if (right == null) {
return left == null;
}
//如果节点的值不一样,返回false
if (left.val != right.val) {
return false;
}
//递归对比,必须左节点的左节点和右节点的右节点、左节点的右节点和右节点的左节点都相同时才返回true
return f(left.left, right.right) && f(left.right, right.left);
}