富士相機使用者福音,適馬宣佈將推 X 卡口 18-50mm F2.8 DC DN 鏡頭
阿新 • • 發佈:2022-02-22
題目描述:
給定二叉搜尋樹的根結點root
,返回值位於範圍[low, high]
之間的所有結點的值的和。
提示:
- 樹中節點數目在範圍 [1, 2 * 104] 內
- 1 <= Node.val <= 105
- 1 <= low <= high <= 105
- 所有 Node.val 互不相同
示例:
輸入:root = [10,5,15,3,7,null,18], low = 7, high = 15 輸出:32
解題思路:
由於給定的是二叉搜尋樹,我們就要充分利用好二叉搜尋樹的特性,不必對節點全部遍歷。我們可以用深度優先搜尋進行範圍和的求解,分為以下四種情況:
- 當前節點為空,返回0;
- 當前節點的val小於區間[low,high],由於二叉搜尋樹左子樹上所有節點的值均小於根節點的值,即均小於low,故無需考慮左子樹,向右子樹進行搜尋。
- 當前節點的val大於區間[low,high],由於二叉搜尋樹右子樹上所有節點的值均大於根節點的值,即均大於high,故無需考慮右子樹,向左子樹進行搜尋。
- 當前節點的val在區間[low,high]範圍內(包含邊界),那麼範圍和要加上當前節點的值,同時對左右子樹分別進行搜尋。
var rangeSumBST = function(root, low, high) { if(root == null){return 0; } let sum = 0; if(root.val<low){ sum += rangeSumBST(root.right,low,high); }else if(root.val>high){ sum += rangeSumBST(root.left,low,high); }else{ sum += root.val; sum += rangeSumBST(root.left,low,high); sum += rangeSumBST(root.right,low,high); }return sum; };