【问题描述:】
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
示例:
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
【思路】:
刚看这道题的时候被难到了,虽然递归的感觉特别强烈,但就是没想到思路。
后来分析了一下对称树的特点,发现了问题的关键。
我发现,对称的二叉树中,对称节点肯定都是相等的,这不用说。
然后,假如node1, node2两个节点是互为对称的,那么node1的左节点肯定和node2的右节点相等。同理,node1的右节点肯定和node2的左节点相等。
这个性质在示例1中展现地非常明显。
所以想到用递归实现,用两个递归参数node1和node2,代表相互对称的两个节点
Java代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
//root节点的对称节点视为自己
return recursion(root, root);
}
//判断两个对称节点是否满足对称条件的递归
public boolean recursion(TreeNode node1, TreeNode node2){
if(node1 != null && node2 != null){
if(node1.val == node2.val){
return recursion(node1.left, node2.right) && recursion(node1.right, node2.left);
}else{
return false;
}
}else if(node1 == null && node2 == null){
return true;
}else{
return false;
}
}
}