在动手写代码前需要进行思考,为什么这题可以用递归去解--> 是否对称与结点以及其孩子结点有关。
将二叉树从根节点以下分开,变成左右两个新的二叉树,新增一个判断两个二叉树是否对称的方法,利用递归方法,返回答案。
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) {
//从根节点将二叉树劈左右两个子二叉树
TreeNode left = root.left;
TreeNode right = root.right;
return leftAndRight(left,right);
}
public boolean leftAndRight(TreeNode left,TreeNode right){
//循环递归结束条件
if(left==null&&right==null){
return true;
}
//不对称,结束递归
if((left==null&&right!=null)||(left!=null&&right==null)){
return false;
}
return left.val==right.val&&leftAndRight(left.left,right.right)&&leftAndRight(left.right,right.left);
}
}