码迷,mamicode.com
首页 > 其他好文 > 详细

对称树 Symmetric Tree

时间:2014-11-02 22:29:08      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   使用   for   sp   div   on   

    算法能力一直不好,决定利用晚上和假期时间多做点算法题,动动手,提高自己。大家看到我的水平低还望莫要嘲笑,嘻嘻。

    这一题呢是LeetCode上的对称树问题,

  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

一开始没能够全面的思考树的情况,单纯理解为对称树即对称的完全二叉树,于是首先想到的就是直接对树进行层次遍历,对每一层进行对称性检验。结果提交时发现,其实如下图这种树也是对称的
   1
   /   2   2
 /     3       3

后来思考能否通过树的中序遍历来判断是否对称,但结果也是不可以的。如下图这棵树:
   1
   /   2   3
 /   / 
3    2 

只能换一种思路啦,对于对称树某一层上的两个相对称节点来说,节点A的左子树与B的右子树对称,节点A的右子树与B的左子树对称。所以可以直接使用递归算法,初始为(root,root)对,然后根据前面的规律递归。

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

 

  若不用递归的方法,则可以设置两个队列,push左右子树的节点进行比较。(一个队列先左后右,另一个先右后左)

public static boolean isSymmetric1(TreeNode root){
      if(root==null)return true;  
        Queue<TreeNode> lt = new LinkedList<TreeNode>();
        Queue<TreeNode> rt = new LinkedList<TreeNode>();
        
        if(root.left!=null) lt.add(root.left);
        if(root.right!=null) rt.add(root.right); 
        TreeNode l;  
        TreeNode r;  
        while(!lt.isEmpty() && !rt.isEmpty())  
        {  
            l = lt.poll();
            r = rt.poll();
            if(l == null && r == null) continue;  
            if(l == null || r == null) return false;  
            if(l.val != r.val) return false;  
            lt.add(l.left);  
            lt.add(l.right);
            rt.add(r.right);
            rt.add(r.left);  
        }  
        if(lt.isEmpty() && rt.isEmpty())  
            return true;  
        else  
            return false;  
}

 

对称树 Symmetric Tree

标签:style   blog   color   ar   使用   for   sp   div   on   

原文地址:http://www.cnblogs.com/kunshao/p/4069945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!