小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
leetcode-101对称二叉树
前文
本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。
题目信息
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
解题思路分析
解法1
对称二叉树从含义可以看出,相当于节点的左右子树完全对称。因此采用一个递归的思路,符合二叉树的一贯处理思想。要注意的是,左子树和右子树要区分处理。也就是左子树的右节点和右子树的左节点比较。左子树的左节点和右子树的右节点比较。只要对应的节点值同时存在或同时不存在,或者值相等,则认为局部对称。经过递归就可以推导出全局都是对称二叉树,也就是整个二叉树是对称二叉树。二叉树的解题思路主要是通过递归,将局部性质进行推广,得到全局共有的属性。 代码分析:
public boolean isSymmetric(TreeNode root) {
if(root == null){
return true;
}
return isTheSame(root.left,root.right);
}
public boolean isTheSame(TreeNode node1,TreeNode node2){
if(node1 == null && node2 != null || node2 == null && node1 != null){
return false;
}
if(node1 == null && node2 == null){
return true;
}
return node1.val == node2.val && isTheSame(node1.left,node2.right) && isTheSame(node1.right,node2.left);
}
复杂度分析
- 时间复杂度 o(n)
- 空间复杂度 o(1)
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。