首页 > 其他 > 详细

#101. 对称二叉树

时间:2021-09-23 19:58:25      阅读:22      评论:0      收藏:0      [点我收藏+]

给定一个二叉树,检查它是否是镜像对称的。

 

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   /   2   2
 / \ / 3  4 4  3


 

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   /   2   2
   \      3    3
方法一:递归
对称表示节点的左节点等于右节点,且如果其中一个节点左右空节点不同则为false
class Solution { public boolean isSymmetric(TreeNode root) { return isSymmetric1(root.left,root.right); } public boolean isSymmetric1(TreeNode root1,TreeNode root2) { if(root1==null&&root2==null){ return true; }else if(root1==null||root2==null){ return false; }else{ return root1.val==root2.val & isSymmetric1(root1.right,root2.left) & isSymmetric1(root1.left,root2.right); } } }
方法二:迭代
/** * 迭代法 * 使用双端队列,相当于两个栈 */ public boolean isSymmetric2(TreeNode root) { Deque<TreeNode> deque = new LinkedList<>(); deque.offerFirst(root.left); deque.offerLast(root.right); while (!deque.isEmpty()) { TreeNode leftNode = deque.pollFirst(); TreeNode rightNode = deque.pollLast(); if (leftNode == null && rightNode == null) { continue; } // if (leftNode == null && rightNode != null) { // return false; // } // if (leftNode != null && rightNode == null) { // return false; // } // if (leftNode.val != rightNode.val) { // return false; // } // 以上三个判断条件合并 if (leftNode == null || rightNode == null || leftNode.val != rightNode.val) { return false; } deque.offerFirst(leftNode.left); deque.offerFirst(leftNode.right); deque.offerLast(rightNode.right); deque.offerLast(rightNode.left); } return true; } /** * 迭代法 * 使用普通队列 */ public boolean isSymmetric3(TreeNode root) { Queue<TreeNode> deque = new LinkedList<>(); deque.offer(root.left); deque.offer(root.right); while (!deque.isEmpty()) { TreeNode leftNode = deque.poll(); TreeNode rightNode = deque.poll(); if (leftNode == null && rightNode == null) { continue; } // if (leftNode == null && rightNode != null) { // return false; // } // if (leftNode != null && rightNode == null) { // return false; // } // if (leftNode.val != rightNode.val) { // return false; // } // 以上三个判断条件合并 if (leftNode == null || rightNode == null || leftNode.val != rightNode.val) { return false; } // 这里顺序与使用Deque不同 deque.offer(leftNode.left); deque.offer(rightNode.right); deque.offer(leftNode.right); deque.offer(rightNode.left); } return true; }

知识点:

总结:

#101. 对称二叉树

原文:https://www.cnblogs.com/canyooo/p/15312184.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!