题目#101.对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
思路分析
判断一个二叉树是否是对称的,只需要判断这个二叉树是否与自己对称即可,代码如下
代码
fun isSymmetric(root: TreeNode?): Boolean {
return isSymmetric(root, root)
}
private fun isSymmetric(a: TreeNode?, b: TreeNode?): Boolean {
if (a == null && b == null) return true
if (a == null || b == null) return false
return a.`val` == b.`val` && isSymmetric(a.left, b.right) && isSymmetric(a.right, b.left)
}
代码分析
因为demo中给定的入参只有一个,所以重载方法,并将两个root传入private fun isSymmetric(a: TreeNode?, b: TreeNode?): Boolean {
,要保证两个二叉树对称需要考虑三种情况:
- 两个树都为空,则两树对称
if (a == null && b == null) return true
- 两个树有且仅有一个为空,则两树一定不对称
if (a == null || b == null) return false
- 否则,只需要满足两树根节点的值相等,且左右子树互相对称既可。
return a.`val` == b.`val` && isSymmetric(a.left, b.right) && isSymmetric(a.right, b.left)
网友评论