问题描述
给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
下面这棵二叉树不对称。
输入描述:
输入一个链表和指定的k值
输出描述:
翻转后的链表
示例
示例1
输入
{1,2,2}
输出
true
解决思路
分析
- 通过递归或者迭代的方式依次对称性的判断两边的节点。
方法
- 通过递归的方式
- 通过迭代的方式(借助队列)
代码实现
// 思路1,通过递归的方式
public class Solution {
public boolean isSymmetric (TreeNode root) {
// write code here
if (root == null) {
return false;
}
return symmetric(root.left, root.right);
}
public boolean symmetric (TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
}
if ((left == null && right != null) || (left != null && right == null)) {
return false;
}
if (left.val != right.val) {
return false;
}
// 左节点的左节点与右节点的右节点比较
// 左节点的右节点与右节点的左节点比较
return symmetric(left.left, right.right) && symmetric(left.right, right.left);
}
}
// 思路2,通过迭代的方式
public class Solution {
public boolean isSymmetric (TreeNode root) {
// write code here
if (root == null) {
return false;
}
return symmetric(root.left, root.right);
}
public boolean symmetric (TreeNode left, TreeNode right) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(left);
queue.add(right);
while (!queue.isEmpty()) {
left = queue.poll();
right = queue.poll();
if (left == null && right == null) {
continue;
}
if (left == null || right == null || left.val != right.val) {
return false;
}
queue.add(left.left);
queue.add(right.right);
queue.add(left.right);
queue.add(right.left);
}
return true;
}
}
小伙伴如果想测试的话,可以直接到牛客网这个链接做测试