个人技术分享

解决二叉树的问题,经常要习惯从递归角度思考
左子树/右子树是否具备某属性、是否属于什么类型(和题目要求的判断当前树是否xxx一样);
对左/右子树进行什么操作(和题目要求的对当前树的操作一样)。

226.翻转二叉树

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;
    }
}

101.对称二叉树

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);
    }
}