提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目描述
给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
注意:题目来自leetcode
解题过程
解题思路
利用递归方法,递归调用自己,并且递归函数递归判断对称情况。
1、创建一个boolean返回值类型的recur递归函数,传入的是左L、右R两个节点;
2、判断当前对称:在recur函数中,如果L和R都为空,则暂时对称,返回true;
3、判断当前不对称;经过2后,如果L为空或R为空或L.val!=R.val则不对称,返回false;
4、递归调用recur,用逻辑与连接recur(L.left,R.right)和recur(R.left,L.right);
7、递归结束;
代码如下:
/**
* 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 root == null? true:recur(root.left, root.right);
}
public boolean recur(TreeNode L, TreeNode R){
//左右节点都是空的情况下是对称的,直接返回true
if(L == null & R == null){
return true;
}
//不对称的3种情况
if(L == null || R == null || L.val != R.val){
return false;
}
//未能判断出是否对称,则继续递归调用recur函数.此处由于是对称关系,所以要用一个逻辑与连接两个递归操作
return recur(L.left, R.right) && recur(L.right, R.left);
}
}
总结
暂时没有总结,待续。。。