一:题目
二:上码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
/**
思路:
1.我们是利用层序遍历 每次入队的不再是一个结点
1>:首次入队是根节点的左右孩子
2>:然后我们每次出对是分别是左右子树上的两个结点。我们对这个两个结点进行比较
是否为空 值是否相等
3>:然后再依次入队的是 左孩子的左节点 右孩子的右节点 左孩子的右节点 右孩子的左节点
*/
public boolean isSymmetric(TreeNode root) {
boolean ans = levelOrder(root);
return ans;
}
public boolean levelOrder (TreeNode root) {
Deque<TreeNode> queue = new LinkedList<>();
//这里是不用判断空的 因为我们需要用空值 进行判断是否返回false呢
queue.push(root.left);
queue.push(root.right);
while (!queue.isEmpty()) {
TreeNode l_node = queue.pop();
TreeNode r_node = queue.pop();
if (l_node == null && r_node == null) continue;
//右节点为空 左节点不空
//左节点不空 右节点为空
//都不为空 但值不相等
if (l_node == null || r_node == null || r_node.val != l_node.val) return false;
queue.push(l_node.left);
queue.push(r_node.right);
queue.push(l_node.right);
queue.push(r_node.left);
}
return true;
}
}
最大收获 deque queue = new LinkedList<>(); 这个集合是可以存放空值 null的
ArrayDeque queue = new ArrayDeque<>();是不可以存放空值null的