如何将基于数组的树转换为按订单?该数组包含:
干杯
public void preOrder(int index) {
if (index >= currSize) {
return;
}
System.out.println(items[index]);
preOrder(2 ^ index + 1); //left
preOrder((2 ^ index) + 2); //right
}
答案 0 :(得分:2)
在预先遍序遍历中,首先处理父级,然后递归处理左子树和右子树。您拥有的表示与堆的表示基本相同,因此很清楚任何节点的左右子节点是什么。这意味着我们可以按预先的顺序遍历它,并按照我们访问它们的顺序打印出节点。
伪代码如下:
print_pre_order(index):
if index is beyond the size of the array:
return
else:
print value at index
print_pre_order(left child of index)
print_pre_order(right child of index)
由于这被安排为堆,因此对于每个索引n,左子项为2 * n,右子项为2 *(n + 1)。请注意,我假设数组的索引从1开始(尽管大多数语言都从0开始),但您可以轻松地将其调整为基于0的数组。
答案 1 :(得分:1)
应该如下。
public void preOrder(int index) {
if (index >= currSize) {
return;
}
System.out.println(items[index]);
preOrder((2 * index)+1);
preOrder((2 * index)+2);
}