力扣爆刷第91天之hot100五连刷41-45

力扣爆刷第91天之hot100五连刷41-45

一、102. 二叉树的层序遍历

题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/description/?envType=study-plan-v2&envId=top-100-liked
思路:层序遍历是典型题目,使用队列,然后将队列的size作为每一层的元素个数。

class Solution {
    List<List<Integer>> arrayList = new ArrayList<>();
    public List<List<Integer>> levelOrder(TreeNode root) {
        if(root == null) return arrayList;
        Deque<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()) {
            int len = queue.size();
            List<Integer> list = new ArrayList<>();
            for(int i = 0; i < len; i++) {
                TreeNode t = queue.poll();
                list.add(t.val);
                if(t.left != null) queue.add(t.left);
                if(t.right != null) queue.add(t.right);
            }
            arrayList.add(list);
        }
        return arrayList;
    }
}

二、108. 将有序数组转换为二叉搜索树

题目链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/?envType=study-plan-v2&envId=top-100-liked
思路:要将有序数组转换成二叉搜索树,直接使用二分法遍历数组,在此过程中创建二叉树即可。

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return bst(nums, 0, nums.length-1);
    }
    TreeNode bst(int[] nums, int left, int right) {
        if(left > right) return null;
        int mid = left + (right-left)/2;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = bst(nums, left, mid-1);
        root.right = bst(nums, mid+1, right);
        return root;
    }
}

三、98. 验证二叉搜索树

题目链接:https://leetcode.cn/problems/validate-binary-search-tree/description/?envType=study-plan-v2&envId=top-100-liked
思路:验证二搜索树,应该使用前序遍历,然后向下遍历的过程中要携带父节点的信息。

class Solution {
   public boolean isValidBST(TreeNode root) {
       return isTrue(root, null, null);
    }

    boolean isTrue(TreeNode root, TreeNode min, TreeNode max) {
        if(root == null) return true;
        if(min != null && root.val <= min.val) return false;
        if(max != null && root.val >= max.val) return false;
        return isTrue(root.left, min, root) && isTrue(root.right, root, max); 
    }
}

四、230. 二叉搜索树中第K小的元素

题目链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst/description/?envType=study-plan-v2&envId=top-100-liked
思路:求第k小的元素要利用二叉搜索树的特性,中序遍历后便是递增序列,所以中序遍历计数即可。

class Solution {
    int v = 0, i = 0;
    public int kthSmallest(TreeNode root, int k) {
        reverse(root, k);
        return v;
    }

    void reverse(TreeNode root, int k) {
        if(root == null) return ;
        reverse(root.left, k);
        i++;
        if(i == k) {
            v = root.val;
        }
        reverse(root.right, k);
    }
}

五、199. 二叉树的右视图

题目链接:https://leetcode.cn/problems/binary-tree-right-side-view/description/?envType=study-plan-v2&envId=top-100-liked
思路:求自上而下的右视图,很简单,采用前序遍历的方法,但是先遍历右子树再遍历左子树,然后用一个全局变量记录深度,每次深度增加才会记录元素。

class Solution {
    List<Integer> list = new ArrayList<>();
    int deep = 0;
    public List<Integer> rightSideView(TreeNode root) {
        reverse(root, 1);
        return list;
    }
    
    void reverse(TreeNode root, int i) {
        if(root == null) return ;
        if(i > deep) {
            deep = i;
            list.add(root.val);
        }
        reverse(root.right, i+1);
        reverse(root.left, i+1);
    }

}

相关推荐

  1. 91hot10041-45

    2024-03-11 15:08:01       46 阅读
  2. 90hot10036-40

    2024-03-11 15:08:01       44 阅读
  3. 92hot10046-50

    2024-03-11 15:08:01       42 阅读
  4. 100hot10086-90

    2024-03-11 15:08:01       38 阅读
  5. 94hot10056-60

    2024-03-11 15:08:01       43 阅读
  6. 95hot10061-65

    2024-03-11 15:08:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 15:08:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 15:08:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 15:08:01       82 阅读
  4. Python语言-面向对象

    2024-03-11 15:08:01       91 阅读

热门阅读

  1. 【Django】聚合查询

    2024-03-11 15:08:01       42 阅读
  2. 数据的处理包括哪些内容

    2024-03-11 15:08:01       37 阅读
  3. TREC 2023 Deep Learning Track Guidelines

    2024-03-11 15:08:01       35 阅读
  4. Django路由层

    2024-03-11 15:08:01       39 阅读
  5. 关于51单片机晶振定时问题

    2024-03-11 15:08:01       44 阅读
  6. Mybatis分组查询大于某值的最小值记录

    2024-03-11 15:08:01       44 阅读