二叉树很多地方会用到递归来简化问题,要记得。
101.对称二叉树
java
class Solution {
public boolean isSymmetric(TreeNode root) {
// 根节点为空,直接对称
if (root == null) {
return true;
}
// 递归对比左右子树的镜像关系
return checkMirror(root.left, root.right);
}
public boolean checkMirror(TreeNode left ,TreeNode right){
if(left ==null && right ==null ){
return true;
}
if(left ==null|| right ==null){
return false;
}
if(left.val==right.val && checkMirror(left.left,right.right) && checkMirror(right.left,left.right) ){
return true;
}else{
return false;
}
}
}

2.计算二叉树的直径(记住例子,慢慢理解)

一句话核心:遍历所有节点,求每个节点左右子树深度和的最大值,就是直径。
java
class Solution {
int ans;// 全局变量:记录最长路径的节点数
public int diameterOfBinaryTree(TreeNode root) {
// ans=1;// 初始化为1,适配单节点/空树边界情况
if(root==null){
return 0;
}
calDepth(root);// 递归计算深度,同步更新最长路径节点数
return ans-1;// 节点数 → 边数(最终直径)
}
// 递归方法:计算当前节点为根的子树深度(节点数),同步更新ans
public int calDepth(TreeNode root){
if(root==null){
return 0;
}
int L=calDepth(root.left);//左深度
int R=calDepth(root.right);//右深度
ans=Math.max(ans,L+R+1); //
// 更新最长路径节点数,一个可以修改的全局变量,这个才是核心
return Math.max(L,R)+1;// 返回当前子树深度(含自身),就是给自己用的
}
}