代码随想录算法训练营第14天 | 复习二叉树翻转

2024年7月16日

题226. 翻转二叉树

/**
 * 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 TreeNode invertTree(TreeNode root) {
        if(root==null){
            return null;
        }
        return reverse(root);
    }

    public TreeNode reverse(TreeNode root){
        if(root.left==null && root.right!=null){
            root.left=root.right;
            reverse(root.left);
            root.right=null;
            return root;
        }
        if(root.left!=null && root.right==null){
            root.right=root.left;
            reverse(root.right);
            root.left=null;
            return root;
        }
        if(root.left==null && root.right==null){
            return root;
        }
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        reverse(root.left);
        reverse(root.right);
        return root;
    }
}

题101. 对称二叉树
首先判断左右子树本身,最后判断左右子树的子树。

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        return compare(root.left,root.right);
    }

    public boolean compare(TreeNode left, TreeNode right){
        //首先判断节点,然后再考虑下层
        if(left==null && right==null){
            return true;
        }else if(left==null && right!=null){
            return false;
        }else if(left!=null && right==null){
            return false;
        }else if(left!=null && right!=null && left.val!=right.val){
            return false;
        }else{
            return compare(left.left,right.right) && compare(left.right,right.left);
        }
    }
}

题104. 二叉树的最大深度
层序遍历后返回list长度即可,注意判断root为空就返回0。

题111. 二叉树的最小深度
用一个属性来记录,当左右子树都为null时,就记录当前高度。如果更小,就记下来。

class Solution {

    public int minHeight;

    public int minDepth(TreeNode root) {
            List<List<Integer>> res = new ArrayList<>();
        if(root==null){
            return 0;
        }
        minHeight=Integer.MAX_VALUE;
        //用根左右遍历,每次记录高度
        int height=0;
        res = digui(res,height,root);
        return minHeight;
    }

    public List<List<Integer>> digui(List<List<Integer>> res,int height,TreeNode p){
        if(res.size()<height+1){
            List<Integer> res1 = new ArrayList<>();
            res.add(res1);
        }
        int val = p.val;
        res.get(height).add(val);
        if(p.left==null && p.right==null){
            if(minHeight>height+1){
                minHeight=height+1;
            }
            return res;
        }
        if(p.left!=null){
            res = digui(res,height+1,p.left);
        }
        if(p.right!=null){
            res = digui(res,height+1,p.right);
        }
        return res;
    }
}
posted @ 2024-07-17 14:53  hailicy  阅读(2)  评论(0编辑  收藏  举报