题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pRoot TreeNode类 * @return bool布尔型 */ public boolean isSymmetrical (TreeNode pRoot) { // write code here if (pRoot == null) { return true; } return isIter(pRoot); } private boolean isIter(TreeNode root) { if (root.right != null && root.left != null) { ArrayDeque<TreeNode> leftqueue = new ArrayDeque<>(); leftqueue.addFirst(root.left); ArrayDeque<TreeNode> rightqueue = new ArrayDeque<>(); rightqueue.addLast(root.right); while (!leftqueue.isEmpty() && !rightqueue.isEmpty()) { TreeNode left = leftqueue.pollFirst(); TreeNode right = rightqueue.pollLast(); System.out.println(left.val + " " + right.val); if (left == null && right == null) { continue; } if (left == null || right == null || left.val != right.val) { return false; } if (left.left != null && right.right != null) { leftqueue.addFirst(left.left); rightqueue.addLast(right.right); } else if (left.left == null && right.right == null) { } else { return false; } if (left.right != null && right.left != null) { leftqueue.addFirst(left.right); rightqueue.addLast(right.left); } else if (left.right == null && right.left == null) { } else { return false; } } return true; } else if (root.left == null && root.right == null) { return true; } return false; } private boolean isSame(TreeNode left, TreeNode right) { if (left == null && right == null) { return true; } else if (left != null && right != null) { if (left.val == right.val) { return isSame(left.left, right.right) && isSame(left.right, right.left); } else { return false; } } else { return false; } } }
递归暂且不提,使用了队列主要是为了锻炼对java基层数据结构的使用。这次是使用了ArrayQueue, 一大缺点就是不能加入null值。
在示例中使用了LinkList可以加入null。