题解 | #对称的二叉树#
对称的二叉树
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。
