代码随想录-刷题笔记
内容:
本题有一定的难度,但其实想明白需要同时用到左右节点之后,就没什么难度了
本题是看左右是否对称,并非左右节点是否相等,相信仔细读过题不可能不明白这一点
好了,接下来开始递归三部曲
1.确定返回值和参数
因为要返回true or false , 所以一定是 bool类型 , 参数上面也提到一定要是左右节点
public boolean compare(TreeNode node1 , TreeNode node2)
2.确认终止条件 ,
node1的left 和 node2的 right 完全相等
node2的left 和 node1的 right完全相等
凡是不满足上面的都是终止条件.
3.确认递归逻辑
对于两个节点,必须保证 外侧和里侧都为true才可以.
从上面三点可以轻松得到代码
/**
* 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 compare(TreeNode node1 , TreeNode node2) {
if(node1 == null && node2 != null ) return false;
else if(node1 != null && node2 == null) return false;
else if(node1 == null && node2 == null) return true;
else if(node1.val != node2.val) return false;
boolean outSide = compare(node1.left , node2.right);
boolean inSide = compare(node1.right , node2.left);
return outSide && inSide;
}
public boolean isSymmetric(TreeNode root) {
if(root!= null)
return compare(root.left , root.right);
return true;
}
}
总结:
本题还是比较基础的问题,但是要注意一些细节才可以. 我脑子比较笨,当时就没想到需要同时加载两个节点.