给你一个二叉树的根节点 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
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
思路:
-
定义递归函数:创建一个递归函数
IsMirror
,该函数接受两个参数,分别代表二叉树的左子树和右子树的根节点。 -
递归终止条件:
-
如果两个节点都为空,返回
true
。 -
如果一个为空而另一个不为空,返回
false
。 -
如果两个节点的值不相等,返回
false
。
-
-
递归调用:
-
递归地调用
IsMirror
函数,比较左子树的左子节点和右子树的右子节点。 -
递归地调用
IsMirror
函数,比较左子树的右子节点和右子树的左子节点。
-
-
返回结果:如果上述两个递归调用都返回
true
,则当前节点的左右子树是对称的,返回true
。
代码:C#
public class Solution {
public bool IsSymmetric(TreeNode root) {
if(root==null)
return true;
return isMirror(root.left,root.right);
}
private bool isMirror(TreeNode nodeLeft,TreeNode nodeRight)
{
if(nodeLeft==null&&nodeRight==null)
return true;
if(nodeLeft==null||nodeRight==null||nodeLeft.val!=nodeRight.val)
return false;
return isMirror(nodeLeft.left,nodeRight.right) && isMirror(nodeLeft.right,nodeRight.left);
}
}