如何修改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
相关产品推荐
相关产品推荐

