已解答
简单
相关标签
相关企业
给你一个二叉树的根节点
root
, 检查它是否轴对称。示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false提示:
- 树中节点数目在范围
[1, 1000]
内-100 <= Node.val <= 100
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
双端队列迭代
1H
public boolean isSymmetric(TreeNode root) {
//1.后序遍历 左右中
//2.把左树放进双端队列左 把右树放进双端队列右
//3.进行条件比较
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 || leftNode.val != rightNode.val){
return false;
}
//把下两棵树放进栈(双端队列 = 2个栈)里
deque.offerFirst(leftNode.left);
deque.offerFirst(leftNode.right);
deque.offerLast(rightNode.right);
deque.offerLast(rightNode.left);
}
return true;
}