题目描述
题干:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
题解思路
终于到树了,数和图占据了算法界的半壁江山,二叉树作为树中最经典的模型,算法题也是五花八门
普通二叉树、满二叉树、对称二叉树、完全二叉树、线索二叉树等等的概念不是特别难,区分起来还是很简单的
可是一到了算法里,我就有点摸黑了,就这道题而言,只是判断是否对称,经典的递归问题,左右递归判断是否相等
定义二叉树的代码给你了,只需要从根出发左子树的往,左右子树往右,右子树往左,左子树往右,排除特殊情况即可
正确代码
class Solution {
public boolean isSymmetric(TreeNode root) {
return check(root, root);
}
private boolean check(TreeNode a, TreeNode b) {
//树为空则返回true
if ((a == null) && (b == null))
return true;
//左右子树有一棵为空一棵不为空返回false
if ((a == null) || (b == null))
return false;
//判断节点值是否相等,和左右相反着递归
return (a.val == b.val) && check(a.left, b.right) && check(a.right, b.left);
}
}
总结
算法是写出来了,但是我在验证这一块偷了懒,直接就在网站上验证提交了,但是数组和二叉树转换我是真的没自己敲过
自己学的时候也知道层序遍历、先序遍历、后序遍历、深度优先遍历和广度优先遍历,可是自己没有验证过
如果看到这篇文章的你也没有自己试验过,那就快动手敲起来,我今天是实在有些累了,就偷个懒吧
文章如果存在问题或者有更好的题解,希望大佬斧正和评论,各自努力,你我最高处见