• 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

  • 相关阅读:
    Arm宣布将在Linux中应用事务内存扩展支持
    企业上云哪种形式的云更适合?
    AT&T推出云5G网络开源工具Airship
    GitHub源码攻击事件
    你应该选择哪种树莓派?
    Electron 5.0 发布
    Redox OS 发布 0.5 版
    经典的网络安全技术
    inux下:热插拔和模块是什么
    微软宣布全新命令行+脚本工具:PowerShell 7
  • 原文地址:https://www.cnblogs.com/springfor/p/3879595.html
Copyright © 2020-2023  润新知