递归解题:
1.先判断这个树的形状是否是对称的,再判断只有一个根节点的情况,同时我们还要判断对称的节点中的值也要一样。
2. 比较左子树最左边和右子树的最右边的值是否都一样,再比较左子树最右边和右子树的最左边的值是否都一样。
/**
* 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) {
//递归函数
return duicheng(root.left, root.right);
}
public boolean duicheng(TreeNode le, TreeNode ri) {
//看树的形状是否是对称的
if ((le==null&&ri!= null) ||(le!=null&&ri== null)) {
return false;
}
//没有左右子树的情况
if (le==null&&ri== null) {
return true;
}
//比较值是否相等
if (le.val!=ri.val) {
return false;
}
// 比较左子树最左边和右子树的最右边
boolean i = duicheng(le.left,ri.right);
// 比较左子树最右边和右子树的最左边
boolean j = duicheng(le.right,ri.left);
return i && j;
}
}