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

二叉树是否是镜像对称

时间:2020-11-20 12:14:29      阅读:9      评论:0      收藏:0      [点我收藏+]

标签:实现   div   大于   static   bool   方法   boolean   解决   tin   

一、判断二叉树是否对称

给定一棵二叉树,判断它是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
      1
    /   \
  2       2
 / \      / \
3   4    4   3
下面这棵二叉树不对称。
     1
    / \
  2    2
    \    \
     3    3
备注:
希望你可以用递归和迭代两种方法解决这个问题
二、示例

  输入:{1,2,2}                 输出:true

  输入:{1,2,3,3,#,2,#}    输出:false

三、算法:

思路:用高度大于2的二叉树举例来说吧,也就是上面第一个例子,只要结点1的左孩子和结点2的右孩子相等,并且结点1的右孩子和结点2的左孩子相等,我们就认为是镜像,前提是结点1和结点2兄弟结点;

递归实现如下:

 1 public static boolean isSymmetric(TreeNode root) {
 2         if(root == null) 
         return true; 3 return in(root.left, root.right); 4 } 5 6 7 //递归 8 public static boolean in(TreeNode l1, TreeNode l2){ 9 if(l1 == null && l2 == null)
          return true; 10 if(l1 == null || l2 == null)
          return false; 11 return l1.val == l2.val && in(l1.left,l2.right) && in(l1.right,l2.left); 12 }
}

 

非递归调用

//迭代
    public static boolean isSymm(TreeNode root){
        if(root == null) 
             return true;
        Queue<TreeNode> q = new LinkedList<>();
        q.add(root.left);
        q.add(root.right);
        while (!q.isEmpty()) {
            TreeNode t1 = q.poll();
            TreeNode t2 = q.poll();
            if (t1 == null && t2 == null) continue;
            if (t1 == null || t2 == null) return false;
            if (t1.val != t2.val) return false;
            
       q.offer(t1.left); q.offer(t2.right); q.offer(t1.right); q.offer(t2.left); }
return true; }

 

 

 

 

二叉树是否是镜像对称

标签:实现   div   大于   static   bool   方法   boolean   解决   tin   

原文地址:https://www.cnblogs.com/linghu-java/p/13984542.html

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