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

Max Heap元素存储位置及中序遍历访问方法咨询

问题解答

一、添加的元素存在哪里?

你的代码不是最大堆,而是一棵二叉搜索树(BST),而且你定义的myList、nodes、num、head这些变量全程没有被使用,自然找不到添加的元素。

所有添加的整数都存储在以root为根节点的二叉搜索树节点中:

  • add方法调用addRecursive递归插入元素:新元素比当前节点值大,就挂载到当前节点的左子树;比当前节点值小,挂载到右子树;值相等则不重复添加。
  • 每次插入都会从root开始遍历,最终整个树的根节点始终存在root变量里,所有节点通过left/right指针串联成树结构,和你定义的LinkedList、Queue完全无关。

二、如何通过中序遍历访问元素?

二叉搜索树的中序遍历遵循「左子树→当前节点→右子树」的顺序,结合你代码里的BST逻辑(大值在左、小值在右),中序遍历会得到降序排列的元素序列。

你可以给PriorityQueue类添加以下遍历方法:

// 递归实现中序遍历
private void inorderRecursive(Node current) {
    if (current == null) {
        return;
    }
    inorderRecursive(current.left); // 先遍历左子树(更大的元素)
    System.out.print(current.value + " "); // 访问当前节点的值
    inorderRecursive(current.right); // 再遍历右子树(更小的元素)
}

// 对外暴露的遍历入口
public void inorderTraversal() {
    inorderRecursive(root);
}

调用示例:

PriorityQueue pq = new PriorityQueue();
pq.add(5);
pq.add(3);
pq.add(7);
pq.inorderTraversal(); // 输出:7 5 3

额外提醒

如果你的目标是实现最大堆,当前代码完全不符合堆的结构要求(堆是完全二叉树,父节点值≥子节点值,插入时需从尾部上浮调整),这个代码的逻辑是二叉搜索树,和堆的实现原理完全不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:57:42