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

如何修改Java二叉树printNodes方法以输出根节点倍数的中序遍历结果?

问题分析与修复方案

我来帮你搞定这个问题!你的printNodes方法目前存在一个逻辑漏洞,导致无法遍历到所有可能符合条件的节点。

原代码的问题所在

你现在的代码逻辑是只有当前节点是根节点的倍数时,才会递归遍历它的左右子树。这就意味着:如果某个节点本身不符合条件,但它的子节点符合条件,这些子节点会被完全跳过,根本不会被访问到,自然也不会被打印。

举个例子:假设根节点是10,树中有一个节点7(不是10的倍数),它的右子节点是20(是10的倍数)。原代码遇到7时,因为不符合条件,不会执行printNodes(node.right),20就永远不会被遍历和打印。

修复后的代码

我们需要调整逻辑:先完成完整的中序遍历(左子树 -> 当前节点 -> 右子树),在遍历到每个节点时,再判断它是否是根节点的倍数,符合条件才打印。这样所有节点都会被遍历到,不会漏掉任何符合条件的子节点。

修改后的printNodes方法如下:

public void printNodes(Node node) {
    if (node == null) return;
    // 第一步:递归遍历左子树(中序遍历的左分支)
    printNodes(node.left);
    // 第二步:判断当前节点是否符合条件,符合则打印
    if(node.data % root.data == 0) {
        System.out.print(node.data + " ");
    }
    // 第三步:递归遍历右子树(中序遍历的右分支)
    printNodes(node.right);
}

验证效果

修改后,代码会严格按照中序遍历的顺序访问每个节点,遇到是根节点倍数的节点就打印,正好能得到你预期的输出:20 10 25 5 15 30。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:57:47