You need to enable JavaScript to run this app. Java递归算法运行时间计算:二叉树区间打印函数复杂度分析
优惠活动
大模型
产品
解决方案
定价
更多

Java递归算法运行时间计算:二叉树区间打印函数复杂度分析

给定Java实现
public void print_in_range(Node root,int a, int b){ // 打印值在[a,b]区间内的所有节点,入参满足a < b
    if(root == null)
        return;
        
    if(root.value >= a  && root.value <= b)
        System.out.print(root.value + ",");

    print_in_range(root.left, a, b);
    print_in_range(root.right, a, b); 
}
问题解答

1. 运行时复杂度

该实现没有利用二叉搜索树的节点值排序规则做分支剪枝,会无差别递归访问整棵二叉树的所有节点,不管节点值是否落在目标区间内,因此运行时复杂度为 O(n),n为整棵二叉树的总节点数。

对比带剪枝的范围查询逻辑:如果是标准二叉搜索树的范围遍历,遇到根节点值小于a就可以跳过左子树、值大于b就可以跳过右子树,遍历规模会和目标区间内的节点数挂钩;但当前代码没有加这类判断,哪怕当前节点值完全超出区间,仍然会递归遍历左右两个分支,因此遍历规模和区间大小无关,始终是全量遍历所有节点。

2. 时间递推公式

先明确变量定义:

  • T(n):处理节点总数为n的二叉树子树的累计执行耗时
  • T(0):空树场景的执行耗时
    对应的递推关系:
  • 基准情况:当子树为空(n=0)时,T(0) = O(1),对应空判断后直接返回的常数级开销
  • 一般情况:对于节点数为n的非空子树,单节点本身的边界判断、符合条件的打印操作是常数级开销O(1),同时会完整递归遍历左子树和右子树,满足T(n) = T(n_left) + T(n_right) + O(1),其中左子树节点数n_left、右子树节点数n_right满足n_left + n_right = n - 1

如果是结构平衡的二叉树,左右子树的节点数各约为n/2,递推式可简化为标准形式T(n) = 2T(n/2) + O(1),通过主定理可推导得到最终复杂度为O(n),和全量遍历节点的实际开销一致。

内容的提问来源于stack exchange,提问作者daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 01:15:03