1、题目描述
给定一个二叉树,检查它是否是镜像对称的。
?2、算法分析
题目要求:判断二叉树是否对称。
① 首先是判断根节点,根节点的左右子树都(&&)为空,则二叉树是对称的
② 根节点的左右子树其中一个不为空(||),则二叉树不是对称的
③ 判断左子树的的左孩子 和? 右子树的右孩子的值相等? && 左子树的右孩子 和右子树的做孩子的结点值是否相等
OK,看代码。
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 isSymmetric(TreeNode root) {
if(root == null){
return true;
}else{
return isSame(root.left,root.right);
}
}
public boolean isSame(TreeNode leftNode,TreeNode rightNode){
if(leftNode == null && rightNode == null){
return true;
}
if(leftNode == null || rightNode == null){
return false;
}
if(leftNode.val == rightNode.val){
return isSame(leftNode.left,rightNode.right) && isSame(rightNode.left,leftNode.right);
}else{
return false;
}
}
}
第二遍做这道题了,做过就忘,也正常。。
|