101.对称二叉树Java
题目描述
给定一个二叉树,检查它是否是镜像对称的。
输入输出样式
示例1:
tn = [1,2,2,3,4,4,3]
输出:true
示例2:
tn = [1,2,2,null,3,null,3]
输出:false
本题来自LeetCode:https://leetcode-cn.com/problems/symmetric-tree/
思路
利用递归的思想,一棵树是否满足镜像对称,比较左右两个子树,且左子树的左子树要和右子树的右子树比较。
算法分析
时间复杂度O(n),空间复杂度为O(n)
求解函数
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return isSameTree(root.left, root.right);
}
//比较两个二叉树是否镜对称
public boolean isSameTree(TreeNode p, TreeNode q) {
//都为空即对称
if (p == null && q == null) {
return true;
}
//如果都不为空且他们的值相同,则继续往下进行比较,否则返回false
if (p != null && q != null && p.val == q.val) {
return isSameTree(p.left, q.right) && isSameTree(p.right, q.left);
} else {
return false;
}
}