【问题标题】:Reversed recursive traversal B-Tree反向递归遍历 B-Tree
【发布时间】:2021-10-30 12:12:36
【问题描述】:

我有一个 B-Tree,它带有我在 GeeksForGeeks 上找到的执行标准中序遍历的遍历函数。我试图通过更改 for 循环来修改它以进行反向中序遍历,但它似乎不起作用。有什么想法吗?

private void reversedInOrder(BTreeNode node) {
        int i;
        for (i = node.numNodes - 1; i >= 0; i--) {
            if (!node.isLeaf) {
                reversedInOrder(node.children[i]);
            }
            System.out.println(node.keys[i].getRedId());     
        }
        if (!node.isLeaf) {
            reversedInOrder(node.children[i]);
        }
    }

【问题讨论】:

  • 你的循环增量看起来不对。
  • 使用调试器逐步检查您的代码,您很快就会发现问题所在。
  • 您在 numnodes-1 处开始 for 循环,但随后您仍在向上计数(递增)而不是向下计数,因此,当然,您永远不会达到零。
  • 对不起,这是复制/粘贴的错字,当减量正确时,我仍然有问题。

标签: java b-tree


【解决方案1】:

经过更多调试后,我发现了问题所在。这是解决方案。好像我的索引关闭了。

private void reversedInOrder(BTreeNode node) {
        int i;
        for (i = node.numNodes; i > 0; i--) {
            if (!node.isLeaf) {
                reversedInOrder(node.children[i]);
            }
            if (node.keys[i - 1] != null) {
                System.out.println(node.keys[i - 1].getName());
            }
        }
        if (!node.isLeaf) {
            reversedInOrder(node.children[i]);
        }
    }

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2017-09-16
    • 2017-08-25
    • 1970-01-01
    • 2018-07-12
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多