题解 | #农场牛的最佳观赏区间#
农场牛的最佳观赏区间
https://www.nowcoder.com/practice/7b49f5ad9814424d8c41de44f671d59e
考察的知识点:二叉搜索树、深度优先搜索;
解答方法分析:
- 定义一个递归函数rangeSum,接收一个指向根节点的指针参数root以及区间的最小值low和最大值high,并返回区间内所有节点值的和。
- 在rangeSum函数中,首先判断根节点root是否为空。若为空,则返回0,表示当前子树无节点。
- 接着判断根节点的值是否在区间范围内。若不在范围内,则继续递归遍历左子树(当root->val > high时)或右子树(当root->val < low时),并返回子树内节点值的和。
- 若根节点的值在区间范围内,则将根节点的值加入结果中,然后继续递归遍历左子树和右子树,将它们返回的值累加到结果中。
- 最后返回累加结果。
所用编程语言:C++;
完整编程代码:↓
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: int rangeSum(TreeNode* root, int low, int high) { if (root == nullptr) { return 0; } if (root->val < low) { return rangeSum(root->right, low, high); } if (root->val > high) { return rangeSum(root->left, low, high); } int sum = root->val; sum += rangeSum(root->left, low, high); sum += rangeSum(root->right, low, high); return sum; } int rangeSumBST(TreeNode* root, int low, int high) { return rangeSum(root, low, high); } };