今天的这道题我居然很快就理解做出来了,叉会腰。
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。
来源:LeetCode
输入:root = [10,5,15,3,7,null,18], low = 7, high = 15 输出:32
输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10 输出:23
别看题目似乎很复杂,其实很好理解,我们从这棵树找到的点看下图:
以示例一为例子:
low = 7, high = 15
那么红框部分就是我们需要找到的[7,15]结点,相加输出32,那么该如何判断呢?
参考官方思路采用深度优先搜索,记当前子树根节点为root,分情况判断(三种情况),最后输出结点相加的和。
第一种情况,root为空,输出0即可
当前子树结点>high时说明不需要看右子树,将左子树相加:
当前子树结点<low时说明不需要看左子树,将右子树相加。
最后输出根+左子树范围和+右子树范围和即可
var rangeSumBST = function(root, low, high) { if(!root){ return 0; } if(root.val>high){ return rangeSumBST(root.left,low,high); } if(root.val<low){ return rangeSumBST(root.right,low,high); } return root.val + rangeSumBST(root.left,low,high) + rangeSumBST(root.right,low,high); };
原文:https://www.cnblogs.com/yesimola/p/14708405.html