力扣爆刷第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);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

当年拼却醉颜红

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值