给你一个二叉树的根节点
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
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
java 解题思路及代码实现
package com.java.leetcode.tree;
import com.java.leetcode.compent.TreeNode;
/**
* 给你一个二叉树的根节点 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
*
*
* 进阶:你可以运用递归和迭代两种方法解决这个问题吗?
*/
public class isSymmetric101 {
/**
* 思路:需要对判定 该树是否为轴对称,那么我们可以将该二叉树 在第二层 拆成两个子树,
* 通过遍历这两个子二叉树的镜像节点来判定该二叉树是否为对称二叉树
*
*
* @param root
* @return
*/
public boolean isSymmetric(TreeNode root) {
//
if (root == null) return true;
return compare(root.left,root.right);
}
public boolean compare(TreeNode left,TreeNode right){
//轴对称树 节点对比,
// 判断子树是否存在 左存在 右不存在
if(left==null&&right!=null){
return false;
//
}//左存在 右不存在
else if(left!=null&&right==null){
return false;
}//左不存在,右也不存在
else if((left ==null)&& (right==null) ){
return true;
}// 左右都存在 但是镜像节点值不同
else if(left.val!=right.val){
return false;
}
// 剩余为 左存在 右也存在 节点值也相同 那么就继续判定
// 此处使用递归模型处理,相当于将两个子树的节点进行压栈比较 逻辑是从最下层 子节点镜像开始对比逐级往上。
return compare(left.left,right.right) && compare( left.right,right.left);
}
}