101. 对称二叉树

小豆丁 1年前 ⋅ 1052 阅读
101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。

 

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
 

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

解析

使用递归和BFS两种方式解决

class Solution {
    public boolean isSymmetric(TreeNode root) {
        //递归,直接比较左右子树
        return helper(root,root);
    }
    public boolean helper(TreeNode node1,TreeNode node2){
        if(node1==null&&node2==null) return true;
        if(node1==null||node2==null) return false;
        return node1.val==node2.val && helper(node1.left,node2.right) && helper(node1.right,node2.left);
    }
}
//迭代
class Solution {
    public boolean isSymmetric(TreeNode root) {
        //先层序遍历再弹出
        LinkedList<TreeNode> queue = new LinkedList<>();
        TreeNode head = root;
        queue.add(head);
        while(!queue.isEmpty()){
            int size = queue.size();
            int[] vals = new int[size];
            for(int i = 0 ; i < size ; i ++){
                head = queue.removeFirst();
                if(head!=null){
                    queue.add(head.left);
                    queue.add(head.right);
                    vals[i] = head.val;
                }else{
                    vals[i] = Integer.MAX_VALUE;
                }

                
            }
            for(int i = 0 ; i < size/2;i++){
                if(vals[i]!=vals[size-1-i]){
                    return false;
                }
            }
        }
        return true;
    }
}