zoukankan      html  css  js  c++  java
  • 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

    参考 http://www.cnblogs.com/feiling/p/3251061.html & http://fisherlei.blogspot.com/2013/01/leetcode-symmetric-tree.html

    非递归解法:按层遍历,每一层检查一下是否对称。

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean isSymmetric(TreeNode root) {
            
            if(root == null) {
                return true;
            }
            
            LinkedList<TreeNode> l = new LinkedList<TreeNode>(),
            LinkedList<TreeNode> r = new LinkedList<TreeNode>();
             
             l.add(root.left);
             r.add(root.right);
             
             while(!l.isEmpty() && !r.isEmpty()) {
                 TreeNode t1 = l.poll(); TreeNode t2 = r.poll();
                 
                 if((t1 == null && t2 != null)||(t2 == null && t1 != null)){
                     return false;
                 }
                 
                 if( t1 != null){
                     if(t1.val != t2.val){
                         return false;
                     }
                     
                     l.add(t1.left);
                     l.add(t1.right);
                     r.add(t2.right);
                     r.add(t2.left);
                 }
                 
             }
             
             return true;
        }
    }

    递归解法:

     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public boolean isSymmetric(TreeNode root) {
    12         if(root == null)
    13             return true;
    14         
    15         return checkSymmetric(root.left, root.right);
    16     }
    17     
    18     private boolean checkSymmetric(TreeNode left, TreeNode right){
    19         if(left == null && right == null)
    20             return true;
    21         
    22         if((left == null && right != null) || (left != null && right == null))
    23             return false;
    24         
    25         if(left.val != right.val)
    26             return false;
    27         
    28         return checkSymmetric(left.left, right.right) && checkSymmetric(left.right, right.left);
    29     }
    30 }
    其中左子树和右子树对称的条件:
      1. 两个节点值相等,或者都为空
      2. 左节点的左子树和右节点的右子树对称
      3. 左节点的右子树和右节点的左子树对称
        /**
         * Definition for binary tree
         * public class TreeNode {
         *     int val;
         *     TreeNode left;
         *     TreeNode right;
         *     TreeNode(int x) { val = x; }
         * }
         */
        public class Solution {
            public boolean isSymmetric(TreeNode root) {
                if(root == null)
                    return true;
                else
                    return check(root.left, root.right);
            }
            
            private boolean check(TreeNode left, TreeNode right){
                if(left == null) return right == null;
                if(right == null) return left == null;
                
                if(left.val != right.val)
                    return false;
                else
                    return check(left.left, right.right) && check(left.right, right.left);
            }
        }
  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3532674.html
Copyright © 2011-2022 走看看