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
相关产品推荐
相关产品推荐

