题解 | #判断二叉树是否对称#

判断二叉树是否对称

http://www.nowcoder.com/practice/1b0b7f371eae4204bc4a7570c84c2de1

/**
     * 非递归的方法
     * 分四种情况:
     * 第一种:左右儿子都为空,返回true
     * 第二种:左右儿子一者为空,另一者不为空,返回false
     * 第三种:左右儿子都不为空,但是两者的值不相等,返回false
     * 第四种:左右儿子都不为空,且两者的值相等,继续,将孩子入队
     * 采用队列的方式,每次循环出队列两个,进行上述四种情况判断
     * (注:返回true的情况不能直接返回,需要进行判断,队列为空时,才能返回)
     * 在循环时,入队的顺序要注意:
     * 由于每次出队两个,对应入队的顺序应该是镜像的位置,
     * 如结点left,right判断完之后,符合第四种情况,则入队顺序为:
     * ①queue.add(left.right);
     * ②queue.add(right.left);
     * ③queue.add(left.left);
     * ④queue.add(right.right);
     * 或者
     * ①queue.add(left.left);
     * ②queue.add(right.right);
     * ③queue.add(left.right);
     * ④queue.add(right.left);
     * 符合镜像就可以
     */
    public boolean isSymmetric(TreeNode root) {
        if(root == null)
            return true;
        Queue<TreeNode> queue = new LinkedList<>();
        if(root.left == null || root.right == null){
            if (root.left == null && root.right == null) {
                return true;
            } else {
                return false;
            }
        }
        queue.add(root.left);
        queue.add(root.right);
        while(!queue.isEmpty()){
            int size = queue.size();
            while(size > 0){
                TreeNode left = queue.poll();
                TreeNode right = queue.poll();
                size -= 2;
                if(left == null && right == null)
                    continue;
                else if (left == null || right == null) {
                    return false;
                } else if(left.val != right.val)
                    return false;
                queue.add(left.left);
                queue.add(right.right);
                queue.add(left.right);
                queue.add(right.left);
            }
        }

        return true;
    }
全部评论

相关推荐

dachang盒子:26届秋招必须有实习经历,建议找个实习过度下,同时项目重复率也比较高没有什么难点亮点,我这里有大厂真实的项目可以提供给你学习也可以给你包装大厂实习来提高你的竞争力,感兴趣的话可以私信我或者点我主页简介
你已经投递多少份简历了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务