题目介绍

描述:

给定二叉搜索树的根结点 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。

解题思路:

递归算法的关键是要明确函数的「定义」是什么,然后相信这个定义,利用这个定义推导最终结果。
写树相关的算法,简单说就是,先搞清楚当前 root 节点该做什么,然后根据函数定义递归调用子节点,递归调用会让孩子节点做相同的事情。
二叉树题目的一个难点在于如何通过题目的要求思考出每一个节点需要做什么

二叉树解题策略

一 递归 二 队列 + 迭代 (层次遍历) 三 栈 + 迭代 (非递归遍历) 四 其它

三种基本的遍历方式,都可以用递归来实现。写递归算法的时候,需要注意递归退出条件以及递归操作的表达。

根据二叉搜索树的特性

自己的解法实现

def rangeSumBST3(self, root, L, R):from collections import dequeif not root: return 0queue, res = deque([root]), 0while queue:node = queue.popleft()if node:if L <= node.val <= R:res += node.valif L < node.val:queue.append(node.left)if node.val < R:queue.append(node.right)return res

网上比较优秀的解法

解法一

方法一:深度优先搜索 我们对树进行深度优先搜索,对于当前节点 node,如果 node.val 小于等于 L,那么只需要继续搜索它的右子树;如果 node.val 大于等于 R,那么只需要继续搜索它的左子树;如果 node.val 在区间 (L, R) 中,则需要搜索它的所有子树。

def rangeSumBST(self, root, L, R):def dfs(node):if node:if L <= node.val <= R:self.res += node.valif L < node.val:dfs(node.left)if node.val < R:dfs(node.right)self.res = 0dfs(root)return self.res

解法二

迭代实现深度优先搜索

def rangeSumBST2(self, root, L, R):if not root: return 0stack, res = [root], 0while stack:node = stack.pop()if node:if L <= node.val <= R:res += node.valif L < node.val:stack.append(node.left)if node.val < R:stack.append(node.right)return res

解法三

1、判断节点的值是否在L,R区间内,是的话,递归累加节点的值 2、如果节点的值小于L,递归查找右子树;如果节点的值大于R,递归查找其左子树

def rangeSumBST4(self, root, L, R):if not root:return 0else:if root.val > R:return self.rangeSumBST(root.left, L, R)elif root.val < L:return self.rangeSumBST(root.right, L, R)else:return root.val + self.rangeSumBST(root.left, L, R) + self.rangeSumBST(root.right, L, R)

相关知识总结和思考

相关知识:

BFS:广度/宽度优先。其实就是从上到下,先把每一层遍历完之后再遍历一下一层。

可以使用Queue的数据结构。我们将root节点初始化进队列,通过消耗尾部,插入头部的方式来完成BFS。

二叉搜索树(BST)的特性:

  1. 若它的左子树不为空,则所有左子树上的值均小于其根节点的值
  2. 若它的右子树不为空,则所有右子树上的值均大于其根节点的值
  3. 它的左右子树也分别为二叉搜索树

递归与迭代的区别

递归:重复调用函数自身实现循环称为递归; 迭代:利用变量的原值推出新值称为迭代,或者说迭代是函数内某段代码实现循环;

广度优先搜索生成树怎么画_LeetCode0938: 二叉搜索树的范围和相关推荐

  1. 70. Leetcode 701. 二叉搜索树中的插入操作 (二叉搜索树-基本操作类)

    给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树. 返回插入后二叉搜索树的根节点. 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同.注意,可能 ...

  2. 广度优先搜索生成树怎么画_图的深度优先遍历与广度优先遍历以及最小生成树...

    图的深度优先遍历 题目:写出附从每个顶点出发的一次深度优先搜索遍历序列.在纸上画出遍历过程和序列,提交截图. 错误回答 从A点开始遍历:0124-01324-0134-0324-034 从B点开始遍历 ...

  3. 最近公共祖先 python_求二叉搜索树的最近公共祖先

    给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖 ...

  4. 【数据结构与算法基础】二叉搜索树和平衡二叉树

    写在前面 今天学习在排序和查找中都很有用的特殊二叉树,平衡二叉树和搜索二叉树. 相关代码实现已上传至Github:data_structure/Tree/ 1.二叉搜索树(Binary Search ...

  5. 《恋上数据结构第1季》二叉搜索树BST

    二叉搜索树(BinarySearchTree) BST 接口设计 BST 基础 添加元素: add() 删除元素: remove() 删除节点 – 叶子节点 删除节点 – 度为1的节点 删除节点 – ...

  6. 二叉搜索树的经典应用面试题(keykey-value模式)

    0.题目 1.假设给你一篇英语文章,又给你一个在这个英语文章中的英语单词,让你检查这个英语单词是否拼写正确. 2.假设给你一篇英语文章,如何才能求出文章中所有单词重复出现的次数呢? 1.思路 1.第一 ...

  7. C++ 二叉搜索树(补充)

      目录 1.搜索二叉树的删除 2.递归销毁搜索二叉树 3.递归复制二叉搜索树,搜索二叉树的深拷贝,析构函数 4.赋值 5.递归版本的查找 *6.递归版本的插入 7.递归版本的删除 代码总览 1.搜索 ...

  8. 中序遍历解决二叉搜索树问题

    中序遍历解决二叉搜索树问题 Python3 树 深度优先搜索 通过中序遍历二叉搜索树得到的关键码序列是一个递增序列. 这是二叉搜索树的一个重要性质,巧妙利用这一性质可以解决一系列二叉搜索树问题. 本系 ...

  9. python二叉搜索树建立_700. 二叉搜索树的搜索(Python)

    题目 难度:★☆☆☆☆ 类型:二叉树 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 例如, 给 ...

最新文章

  1. java 内存区域中的栈
  2. 艾弗森、穆大叔遭“姚式幽默”调侃 全场爆笑
  3. 关于使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能...
  4. 路由重分发中尽然忘记了这件事
  5. c51语言if语句多条件使用,单片机if语句判断多个条件
  6. mysql最大连接数查询_MYSQL 查看最大连接数和修改最大连接数
  7. TensorFlow 2.0 - tf.saved_model.save 模型导出
  8. Mysql 扩展性设计之Replication,在Mysql具有很相当重要的位置,主从、主主从,你了解他们的背后逻辑吗
  9. sae java 开发环境_新浪开放平台 sae环境 java主机使用感受
  10. 我弟弟用管理员身份把我和爸妈的WIFI设置了,现在就他能用网,气不过,有办法让我出口气吗?
  11. 知乎cookies的介绍_SameSite小识
  12. 常见知识库对比:DBpedia/Freebase/OpenCyc/Wikidata/YAGO3
  13. 金融套利策略:理解统计套利的工作原理
  14. 论文阅读 之 Person Re-identification in the Wild
  15. 归并排序(C语言版)
  16. Minecraft 开服记录 自动备份
  17. C++ Reference: Standard C++ Library reference: C Library: cmath: erfc
  18. 关于js关闭窗口的事件和用法
  19. UE4-控制音效空间效果及衰减效果技巧
  20. STM32应用开发实践教程:基于 CAN 总线的多机通信应用开发

热门文章

  1. 强迫症设计师最爱的对称构图,促销模板
  2. 平面设计师如何利用图片素材提升工作效率
  3. linux位置变量的应用,llinux中变量的运用
  4. python爬火车票是不是违法_python利用selenium+requests+beautifulsoup爬取12306火车票信息...
  5. QT实现完整TIM登录框界面样式
  6. QTableWidget插入项item方法 及误区
  7. Linux网络协议栈:NAPI机制与处理流程分析(图解)
  8. linux tar 命令
  9. php 正则表达式 文档,php的正则表达式完全手册
  10. 服务器按ctrl alt delete没有用_用完这些快捷键,我再也回不去了(Win系统篇)