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

    题目:

    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.

    题解

    判断左右子树是否相等。

    递归的解法:

     1  public boolean isSymmetricTree(TreeNode p,TreeNode q){
     2      if(p == null&&q == null)
     3         return true;
     4      if(p == null||q == null)
     5         return false;
     6      return (p.val == q.val) && isSymmetricTree(p.left, q.right) && isSymmetricTree(p.right, q.left);
     7 }
     8 
     9 public boolean isSymmetric(TreeNode root) {
    10     if(root==null
    11         return true;
    12         
    13     return isSymmetricTree(root.left,root.right);
    14 }

    非递归解法:

     1 public boolean isSymmetric(TreeNode root) {
     2     if(root == null)
     3         return true;
     4     if(root.left == null && root.right == null)
     5         return true;
     6     if(root.left == null || root.right == null)
     7         return false;
     8     LinkedList<TreeNode> q1 = new LinkedList<TreeNode>();
     9     LinkedList<TreeNode> q2 = new LinkedList<TreeNode>();
    10     q1.add(root.left);
    11     q2.add(root.right);
    12     while(!q1.isEmpty() && !q2.isEmpty()){
    13         TreeNode n1 = q1.poll();
    14         TreeNode n2 = q2.poll();
    15         
    16         if(n1.val != n2.val)
    17             return false;
    18         if((n1.left == null && n2.right != null) || (n1.left != null && n2.right == null))
    19             return false;
    20         if((n1.right == null && n2.left != null) || (n1.right != null && n2.left == null))
    21             return false;
    22         
    23         if(n1.left != null && n2.right != null){
    24             q1.add(n1.left);
    25             q2.add(n2.right);
    26         }
    27         
    28         if(n1.right != null && n2.left != null){
    29             q1.add(n1.right);
    30             q2.add(n2.left);
    31         }            
    32     }
    33     return true;
    34 }

     Reference:

     http://blog.csdn.net/linhuanmars/article/details/23072829

  • 相关阅读:
    VFP获取 SQL Server 的数据表、触发器、存储过程、视图等脚本
    VFP控制Excel操作集
    MS SqlServer 的日期格式化函数 Convert
    VFP 图形文件与剪切板互换的API解决方法
    VFP中OCX控件注册检测及自动注册
    VFP检测SQL Server的五个实例代码
    缓存方案笔记
    windows访问控制列表 --ACL(Access Control List)
    cnblog排版
    GIT常用命令
  • 原文地址:https://www.cnblogs.com/springfor/p/3879595.html
Copyright © 2011-2022 走看看