You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉搜索树全局搜索问题:searchByYear方法无法打印全部匹配影片

问题分析与解决方案

嘿,我找到你代码里的问题啦!你的searchByYear方法之所以只能打印部分匹配结果,核心问题是当找到匹配年份的节点后,你没有继续遍历该节点的左右子树。

原代码的逻辑缺陷

看你这段代码:

private void searchByYear(BTNode root, int year) { 
    BTNode temp = root; 
    if(temp == null) return; 
    else if(temp.data.titleYear == year){
        System.out.println(temp.data.title); 
    } else{
        searchByYear(temp.left, year); 
        searchByYear(temp.right, year); 
    } 
}

当某个节点的年份匹配时,你只执行了打印操作,然后直接结束了当前方法的执行——完全没去检查这个节点的左、右子树里有没有同样年份的影片!而你也说了这棵二叉搜索树不是按年份排序的,所以匹配节点的子树里完全可能存在符合条件的影片,这就导致了部分结果被遗漏。

修正后的代码

要解决这个问题,你需要不管当前节点是否匹配,都要递归遍历它的左右子树,确保整棵树的每个节点都被检查到。修改后的代码如下:

private void searchByYear(BTNode root, int year) { 
    if(root == null) return; 
    // 先检查当前节点是否匹配,匹配就打印
    if(root.data.titleYear == year){
        System.out.println(root.data.title); 
    }
    // 不管当前节点是否匹配,都要遍历左右子树
    searchByYear(root.left, year); 
    searchByYear(root.right, year); 
}

我还帮你去掉了多余的temp变量,直接用root参数就可以了,代码更简洁。

逻辑说明

这个修正后的逻辑是前序遍历(先处理当前节点,再遍历左子树,最后遍历右子树),当然你也可以换成中序或后序遍历,只要保证每个节点都被访问到就行——因为我们需要对整棵树进行全量遍历,遍历顺序不影响最终的打印结果,只要所有符合条件的节点都被检查到。

因为你的树不是按年份排序的,所以没办法利用二叉搜索树的特性进行剪枝,必须遍历每一个节点才能确保找到所有匹配年份的影片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:23:48