题解 | #农场牛的最佳观赏区间#

农场牛的最佳观赏区间

https://www.nowcoder.com/practice/7b49f5ad9814424d8c41de44f671d59e

考察的知识点:二叉搜索树、深度优先搜索;

解答方法分析:

  1. 定义一个递归函数rangeSum,接收一个指向根节点的指针参数root以及区间的最小值low和最大值high,并返回区间内所有节点值的和。
  2. 在rangeSum函数中,首先判断根节点root是否为空。若为空,则返回0,表示当前子树无节点。
  3. 接着判断根节点的值是否在区间范围内。若不在范围内,则继续递归遍历左子树(当root->val > high时)或右子树(当root->val < low时),并返回子树内节点值的和。
  4. 若根节点的值在区间范围内,则将根节点的值加入结果中,然后继续递归遍历左子树和右子树,将它们返回的值累加到结果中。
  5. 最后返回累加结果。

所用编程语言: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);
    }
};

全部评论

相关推荐

07-22 11:53
门头沟学院 Java
终于有一个保底的offer了,但感觉是白菜价
北凝a:我想问问,提前批的offer 有问你啥时候到岗吗,如果你还想找其他的怎么办
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-23 18:25
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务