思路
递归
大问题:对比 左 右 是否对称
参数 左和右
todo 先凑合看

代码
/**
* 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 isSymmetricLR(root.left,root.right);
}
//判断左树 和 右数 是否对称
public boolean isSymmetricLR(TreeNode left,TreeNode right) {
//都为空
if (left == null&&right==null) {
return true;
}
//一个空 一个不空
else if (left == null&&right!=null){
return false;
} else if (left != null&&right==null) {
return false;
}
//都不空,以下:
//1.判左 和右本身是否不同
if (left.val != right.val) {
return false;
}
//2.判断左左 和右右是否不同
//问题转化成 递归调用,其中 left为左左,right为右右
if(!isSymmetricLR(left.left, right.right)){
return false;
}
//3.判断左右 和右左是否不同
//问题转化成 递归调用,其中 left为左右,right为右左
if(!isSymmetric(left.right, right.left)){
return false;
}
return true;
}
}
错误思路
得到中序遍历结果 判断是否对称
出问题: todo为什么这个不行

/**
* 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) {
//得到中序遍历结果 判断是否对称,双指针
List<Integer> list = inorderTraversal(root);
//定义指针
int begin=0;
int end=list.size()-1;
while (begin<end){
if (Objects.equals(list.get(begin), list.get(end))){
begin++;
end--;
}
else{return false;}
}
//退出:等于-相遇 小于-错开
//如果推出循坏还是没有 不相等,就是对称序列
return true;
}
//二叉树中序遍历
public List<Integer> inorderTraversal(TreeNode root) {
if (root==null){
return new ArrayList<>();
}
//初始化 list
List list=new ArrayList<Integer>();
//左子树
//问题转化为:遍历以root.left为根的树,并把结果返回,追加到原来的list上
if(root.left!=null) {
list.addAll(inorderTraversal(root.left));
}
//当前
list.add(root.val);
//右子树
if(root.right!=null) {
list.addAll(inorderTraversal(root.right));
}
return list;
}
}
总结
- todo "得到中序遍历结果 判断是否对称" 为什么不行,思考想问题 怎么想更多测试用例
今天感悟:刷题 不在量,在每一题吃透 ,相关拓展也吃透,相关题型都理解