给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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; }
知识点:
无
总结:
无
原文:https://www.cnblogs.com/canyooo/p/15312184.html