资讯专栏INFORMATION COLUMN

938-二叉搜索树的范围和

LiveVideoStack / 2548人阅读

摘要:前言的第二题二叉搜索树的范围和给定二叉搜索树的根结点,返回和含之间的所有结点的值的和。二叉搜索树保证具有唯一的值。实现代码二叉搜索树的范围和中序遍历递归

前言

Weekly Contest 110的第二题 二叉搜索树的范围和:

给定二叉搜索树的根结点 root,返回 LR(含)之间的所有结点的值的和。

二叉搜索树保证具有唯一的值。

返回日志的最终顺序

示例1:

输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32

示例2:

输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出:23

提示:

树中的结点数量最多为 10000 个。

最终的答案保证小于 2^31

解题思路

本题我选择了一个笨方法去完成,就是利用二叉搜索树的一个特性:通过中序遍历二叉搜索树后可以得到一个递增的有序序列。所以我选择了中序遍历二叉搜索树获得递增且有序的数组,然后遍历数组获取需要的数组元素进行累加。

实现代码
    /**
     * 938. 二叉搜索树的范围和
     * @param root
     * @param L
     * @param R
     * @return
     */
    public int rangeSumBST(TreeNode root, int L, int R) {
        List list=new ArrayList();
        int result=0;
        if(root!=null){
            inorderTraversal(root,list);
        }
        for(int i:list){
            if(i>=L && i<=R){
                result+=i;
            }
        }
        return result;
    }

    /**
     * 中序遍历(递归)
     * @param root
     * @param list
     */
    private void inorderTraversal(TreeNode root,List list){
        if(root.left==null && root.right==null){
            list.add(root.val);
        }else if(root.left==null && root.right!=null){
            list.add(root.val);
            inorderTraversal(root.right,list);
        }else if(root.left!=null && root.right==null){
            inorderTraversal(root.left,list);
            list.add(root.val);
        }else{
            inorderTraversal(root.left,list);
            list.add(root.val);
            inorderTraversal(root.right,list);
        }
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72118.html

相关文章

  • 【手把手带你刷LeetCode】——11.二叉搜索树的范围(DFS)

    摘要:大家简单看一下纯递归的解法原题二叉搜索树的范围和解法题目描述给定二叉搜索树的根结点,返回值位于范围之间的所有结点的值的和。 【前言】 今天是力扣打卡第11天! 感谢铁汁们的陪伴,一起加油鸭!! 在第9天的时候写过这道题的递归解题方法,其实DFS使用的解题思想就是递归,所以大同小异啦...

    HelKyle 评论0 收藏0
  • 学习数据结构与算法之二叉搜索

    摘要:二叉搜索树是二叉树的一种,其特征是左侧子节点存储比父节点小的值,右侧子节点存储比父节点大或等于父节点的值。实现和这个两个方法其实挺简单的,最小的节点就在二叉搜索树的最左反之,最大的就在最右。 本系列所有文章:第一篇文章:学习数据结构与算法之栈与队列第二篇文章:学习数据结构与算法之链表第三篇文章:学习数据结构与算法之集合第四篇文章:学习数据结构与算法之字典和散列表第五篇文章:学习数据结构...

    denson 评论0 收藏0
  • 数据结构——树

    摘要:首先,我们了解一下关于树的基本知识每一个树都包含一系列的父子关系的节点,每个节点都有一个父节点和若干的子节点零个或者多个没有父节点的节点称作是根节点一个节点可以有祖先和后代,子树由节点和他的后代构成,节点的一个属性是深度深度就是一个节点祖先 首先,我们了解一下关于树的基本知识: 每一个树都包含一系列的父子关系的节点,每个节点都有一个父节点和若干的子节点(零个 或者 多个) 没有父节点...

    Backache 评论0 收藏0
  • Python数据结构——AVL树的基本概念

    摘要:我们知道,当树变得不平衡时和操作会使二叉搜索树的性能降低到。树实现抽象数据类型就像一个普通的二叉搜索树,唯一不同的是这棵树的工作方式。我们通过比较每个节点的左右子树的高度完成比较。 平衡二叉搜索树 在上一节中我们讨论了建立一个二叉搜索树。我们知道,当树变得不平衡时get和put操作会使二叉搜索树的性能降低到O(n)。在这一节中我们将看到一种特殊的二叉搜索树,它可以自动进行调整,以确保树...

    jiekechoo 评论0 收藏0
  • 数据结构与算法JavaScript (不定时更新)

    摘要:每个列表中的数据项称为元素。栈被称为一种后入先出,的数据结构。散列使用的数据结构叫做散列表。不包含任何成员的集合称为空集,全集则是包含一切可能成员的集合。因此二叉搜索树需要平衡,即左右子树高度要相近。 楼楼非计算机专业,但是对计算机也还算喜欢。个人理解若有偏差,欢迎各位批评指正! 对于数据结构和算法一直是我的薄弱环节,相信大多数前端工程师可能多少会有些这方面的弱点,加上数据结构和算法本...

    levius 评论0 收藏0

发表评论

0条评论

LiveVideoStack

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<