938. 二叉搜索樹的範圍和
- 2019 年 10 月 7 日
- 筆記
題目
給定二叉搜索樹的根結點 root,返回 L 和 R(含)之間的所有結點的值的和。
二叉搜索樹保證具有唯一的值。
示例 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。
題解
二叉搜索樹的特點是左子節點小於父節點,右子節點大於父節點。對於該題,則是求出L <= X <= R之間的節點的和

在處理樹的問題,常使用遞歸 對於遞歸則需要,1. 需要推導遞歸公式, 2. 終止條件 對於該題,遞歸的終止條件則為 當前節點為空,則返回0,終止遞歸 遞歸公式:當前節點x<L, 則對右子樹的和 當前節點x>R, 則對左子樹的和 當前節點滿足L<=x <= R, 則返回當前節點值 + 左子樹之和 + 右子樹之和 得到了以上的總結,就可以很容易的寫出實現的程式碼
程式碼
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func rangeSumBST(root *TreeNode, L int, R int) int { if root == nil { return 0 } if root.Val < L { return rangeSumBST(root.Right, L, R) } if root.Val > R { return rangeSumBST(root.Left, L, R) } return root.Val + rangeSumBST(root.Left, L, R) + rangeSumBST(root.Right, L, R) }
運行結果

總結
遞歸在電腦演算法中,比較難懂的一塊。它的處理思想就是將一個問題,分解為一個子問題,該問題具有相同的處理程式碼,直到終止條件。遞歸底層使用了棧的數據結構