📌  相关文章
📜  计算位于给定范围内的BST子树(1)

📅  最后修改于: 2023-12-03 14:57:27.889000             🧑  作者: Mango

计算位于给定范围内的BST子树

BST(Binary Search Tree),中文也称为二叉搜索树、二叉排序树或二叉查找树,是一种特殊的二叉树,它的左子树上所有节点的键值都小于它的根节点的键值,右子树上所有节点的键值都大于它的根节点的键值,因此它具有很好的查找、插入、删除性能,被广泛应用于数据检索领域。

本文将介绍如何计算BST中位于给定范围内的子树,我们将详细讲解算法思路和具体的实现方法,并给出示例代码供参考。

算法思路

要计算BST中位于给定范围内的子树,我们可以使用递归算法,在每次递归中判断子树的根节点值是否位于给定范围内,如果是,则将该子树的节点数统计出来并加到结果中,再递归计算左右子树中位于给定范围内的节点数。

具体来说,假设给出范围为[left, right],当前递归到根节点root时:

  1. 如果root为null,则返回0;
  2. 如果root的值小于left,则递归计算root的右子树;
  3. 如果root的值大于right,则递归计算root的左子树;
  4. 如果root的值在[left, right]范围内,计算节点数:root本身加上root的左右子树中位于[left, right]范围内的节点数。
代码实现

下面给出Java实现代码,其中TreeNode是BST节点的定义,calcRange是计算BST中位于给定范围内的子树的函数,主要实现了上述算法思路:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    
    private int count = 0;
    
    public int calcRange(TreeNode root, int left, int right) {
        count = 0;
        calc(root, left, right);
        return count;
    }
    
    private void calc(TreeNode root, int left, int right) {
        if (root == null) {
            return;
        }
        if (root.val < left) {
            calc(root.right, left, right);
        } else if (root.val > right) {
            calc(root.left, left, right);
        } else {
            count++;
            calc(root.left, left, right);
            calc(root.right, left, right);
        }
    }
    
}
总结

本文介绍了如何计算BST中位于给定范围内的子树,给出了基于递归算法的具体实现,希望读者可以从中学到有用的知识,并应用到实际的编程工作中。