LeetCode Hot100刷题——对称二叉树
101.对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
提示:
- 树中节点数目在范围
[1, 1000]
内 -100 <= Node.val <= 100
方法思路
- 递归终止条件:
- 如果两个节点都为空,说明对称
- 如果一个节点为空一个节点不为空,说明不对称
- 递归比较:
- 当前节点的值必须相等
- 左子树的左节点和右子树的右节点必须对称
- 左子树的右节点和右子树的左节点必须对称
解决代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null){
return true;
}
return checkSymmetric(root.left, root.right);
}
private boolean checkSymmetric(TreeNode left, TreeNode right){
if(left == null && right == null){
return true;
}
if(left == null || right == null){
return false;
}
return (left.val == right.val)
&& checkSymmetric(left.left, right.right)
&& checkSymmetric(left.right, right.left);
}
}
代码解释
-
isSymmetric方法:
-
如果根节点为空,直接返回
true
。 -
调用辅助函数
checkSymmetric
检查左右子树是否对称。
-
-
checkSymmetric方法:
-
终止条件:若左右节点均为空,对称;若只有一个为空,不对称。
-
递归比较:比较当前节点值是否相等,并递归检查左子树的左节点与右子树的右节点,以及左子树的右节点与右子树的左节点是否对称。
-