解决二叉树的问题,经常要习惯从递归角度思考
左子树/右子树是否具备某属性、是否属于什么类型(和题目要求的判断当前树是否xxx一样);
对左/右子树进行什么操作(和题目要求的对当前树的操作一样)。
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
TreeNode left = invertTree(root.left);
TreeNode right = invertTree(root.right);
root.left = right;
root.right = left;
return root;
}
}
class Solution {
public boolean isSymmetric(TreeNode root) {
//左节点和右节点是否相等
//左节点的左子树和右节点的右子树是否对称
//左节点的右子树和右节点的左子树是否对称
return check(root.left,root.right);
}
public boolean check(TreeNode root1,TreeNode root2){
if (root1==null && root2==null) return true;
if (root1==null || root2==null) return false;
if (root1.val!=root2.val) return false;
return check(root1.left,root2.right) && check(root1.right,root2.left);
}
}