方法:递归
算法思想:三段式。中左右。
时间复杂度 O(N): 其中 N 为二叉树的节点数量,每次执行 recur() 可以判断一对节点是否对称,因此最多调用 N/2 次 recur() 方法。 空间复杂度 O(N): 最差情况下,二叉树退化为链表,系统使用 O(N)大小的栈空间。 边界条件:判空 补充知识:当 LL 和 RR 同时越过叶节点: 此树从顶至底的节点都对称,因此返回 true,就是到底了 ;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
return root==null?true:rec(root.left,root.right); // 判断根,从初始左右开始递归
}
public boolean rec(TreeNode l ,TreeNode r){
if(l==null&&r==null) return true; //正确路线
if(l==null||r==null||l.val!=r.val) return false;//错误路线
return rec(l.left,r.right)&&rec(l.right,r.left); //递归左右相对应
}
}