• 101. 对称二叉树


     老规矩,使用队列辅助完成广度优先遍历操作。

    从根节点开始将左右孩子压入队列。

    然后不停的从队列出去首2位元素(left,right)进行比较,

    如相等,再将left节点的left节点与right节点的right节点。

    这里有点绕人,需要结合图片理解

    在比较完根节点的2个子孩子2和2后,根据镜像的性质,后续要比较的应该是

    最左边的3和最右边的3,以此类推。

    时间O(n)(每个元素都需要遍历一遍),空间O(n)(完全二叉树情况下叶子节点占n/2)

        public boolean isSymmetric(TreeNode root) {
            if (root==null || (root.left==null && root.right==null))  return true;
            Deque<TreeNode> queue = new LinkedList<TreeNode>();
            // 从根节点的左右孩子处开始比较
            queue.add(root.left);
            queue.add(root.right);
            while(!queue.isEmpty()){
                // 依次取出队首的2个元素(这里的left与right并不一定拥有同一个父节点)
                // 这里需要结合下文的add操作理解
                TreeNode left = queue.poll();
                TreeNode right = queue.poll();
                // 左右孩子都为空,则直接进入一下次比较
                if (left==null && right==null) continue;
                // 在上一次判断的基础上,左右孩子只有一个为空,必然存在左右孩子不等
                if (left==null || right==null) return false;
                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;
        }
    争取早日不再是一只菜鸡
  • 相关阅读:
    分享memcache和memcached安装过程(转)
    ios画图总结
    mac os下通过命令行的方式编译c++代码并在xcode里引用
    ubuntu访问windows共享文件夹
    为iphone 及iphone simulator编译boost库
    ubuntu 11.10 x64 安装oracle 11gR2时碰到的问题及解决方法
    模拟器与真机下ffmpeg的编译方法(总结版)
    ios 在View里绘图
    memcached1.4.4在ubuntu下编译的注意事项
    Google Code 服务试用
  • 原文地址:https://www.cnblogs.com/jchen104/p/14631479.html
Copyright © 2020-2023  润新知