剑指offer面试题28. 对称的二叉树

题目

https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/

方案

方法1、使用dfs 递归遍历

   public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        return helper(root.left,root.right);
    }
    private boolean helper(TreeNode left,TreeNode right){
        if(left==null&&right==null){
            return true;
        }
        if(left==null||right==null||(left.val!=right.val)){
            return false;
        }
        return  helper(left.left,right.right)&&helper(left.right,right.left);

    }

方法2、使用bfs遍历 因为是二叉树要判断镜像,所以队列中除了根节点外,都要放4个元素,有的题解中使用了双端队列,但是无忌觉得没有必要,一个队列完全可以满足 就左右挨着放呗

 public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }

        Queue queue = new LinkedList();
        queue.add(root.left);
        queue.add(root.right);
        while (!queue.isEmpty()){
            TreeNode tmpLeft = queue.poll();
            TreeNode tmpRight = queue.poll();
            if(tmpLeft==null&&tmpRight==null){
                continue;
            }
            if(tmpLeft ==null||tmpRight==null||(tmpLeft.val!=tmpRight.val)){
                return false;
            }
            queue.add(tmpLeft.left);
            queue.add(tmpRight.right);
            queue.add(tmpLeft.right);
            queue.add(tmpRight.left);

        }
        return true;
    }

后记

使用递归和层次遍历需要注意的是bfs中遇到节点对称要继续往下判断,只有发现不对称才返回。

你可能感兴趣的:(数据结构和算法)