zoukankan      html  css  js  c++  java
  • Leetcode Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

    For example, this binary tree is symmetric:

        1
       / 
      2   2
     /  / 
    3  4 4  3

    But the following is not:

        1
       / 
      2   2
          
       3    3 

    Note:
    Bonus points if you could solve it both recursively and iteratively.

    confused what "{1,#,2,3}" means? 

     

    OJ's Binary Tree Serialization:

    The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

    Here's an example:

       1
      / 
     2   3
        /
       4
        
         5
    

    The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".


    解题思路:

    1. 递归

    2. iterative,建立两个queue, 一个从左往右,一个从右往左,镜像比较

    仔细考虑每种情况,很容易漏掉。


    Java code :

    recursion:

    public class Solution {
        public boolean isSymmetric(TreeNode root) {
            if(root == null) {
               return true;
            }
            return isSymmetric(root.left, root.right);
        }
        
        public boolean isSymmetric(TreeNode l, TreeNode r) {
            if(l == null && r == null){
                return true;
            }else if(l == null || r == null) {
                return false;
            }
            if(l.val != r.val ){
                return false;
            }
            if(!isSymmetric(l.left,r.right)) {
                return false;
            }
            if(!isSymmetric(l.right,r.left)) {
                return false;
            }
            return true;
        }
    }

    iterative

    public class Solution {
        public boolean isSymmetric(TreeNode root) {
            //use iterative
            if(root == null){
                return true;
            }
            Queue<TreeNode> left = new LinkedList<TreeNode>();
            Queue<TreeNode> right = new LinkedList<TreeNode>();
            left.add(root.left);
            right.add(root.right);
            while(!left.isEmpty() && !right.isEmpty()) {
                TreeNode l = left.remove();
                TreeNode r = right.remove();
                if(l== null && r== null) {
                    continue;
                }else if(l == null || r == null){
                    return false;
                }
                
                if(l.val != r.val) {
                    return false;
                }else {
                    left.add(l.left);
                    left.add(l.right);
                    right.add(r.right);
                    right.add(r.left);
                }
            }
            return true;
        }
    }

    Reference:

    1. http://www.programcreek.com/2014/03/leetcode-symmetric-tree-java/

  • 相关阅读:
    [初学Untiy]SPACE SHOOTER TUTORIAL
    [OpenGL]第一章 OpenGL概述
    DSAA 第一章 引论
    Learn Python The Hard Way(27--)
    linux 系统tty、pty和pts 的概念及区别
    stuffs of install ubuntu
    第八章、Linux 磁盘与文件系统管理
    第七章 Linux文件与目录管理
    切换不同的echarts时,出现图标缩小,报警告,Can’t get dom width or height!
    echarts x轴的纵向区域随便点击获取点击的x轴那一纵向区域的值
  • 原文地址:https://www.cnblogs.com/anne-vista/p/4812014.html
Copyright © 2011-2022 走看看