- 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
代码:
/**
* 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 isSymmetricChild(TreeNode leftTree,TreeNode rightTree) {
//判断他的左右树是否是对称的
if(leftTree == null && rightTree != null || leftTree != null && rightTree == null ) {
return false;//其中一个为空,返回false;
}
if(leftTree == null && rightTree == null) {
return true;//都为空,对称
}
if(leftTree.val != rightTree.val) return false;//判断相同位置上的节点值是否相等;
return isSymmetricChild(leftTree.left,rightTree.right) && //继续递归左树的左树,右树的右树;
isSymmetricChild(leftTree.right,rightTree.left) ;//和左树的右树,右树的左树,来判断是否对称;
}
public boolean isSymmetric(TreeNode root) {
if(root == null) {
//根节点为空,对称
return true;
}
return isSymmetricChild(root.left,root.right);//遍历左树和右树看是否对称;
}
}