1. 程式人生 > 資訊 >富士相機使用者福音,適馬宣佈將推 X 卡口 18-50mm F2.8 DC DN 鏡頭

富士相機使用者福音,適馬宣佈將推 X 卡口 18-50mm F2.8 DC DN 鏡頭

題目描述:

  給定二叉搜尋樹的根結點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

解題思路:

  由於給定的是二叉搜尋樹,我們就要充分利用好二叉搜尋樹的特性,不必對節點全部遍歷。我們可以用深度優先搜尋進行範圍和的求解,分為以下四種情況:

  1. 當前節點為空,返回0;
  2. 當前節點的val小於區間[low,high],由於二叉搜尋樹左子樹上所有節點的值均小於根節點的值,即均小於low,故無需考慮左子樹,向右子樹進行搜尋。
  3. 當前節點的val大於區間[low,high],由於二叉搜尋樹右子樹上所有節點的值均大於根節點的值,即均大於high,故無需考慮右子樹,向左子樹進行搜尋。
  4. 當前節點的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; };