基于数组的二叉树预订

时间:2012-02-04 07:12:17

标签: java algorithm binary-tree

如何将基于数组的树转换为按订单?该数组包含:

干杯

public void preOrder(int index) {

    if (index >= currSize) {
        return;
    }

    System.out.println(items[index]);
    preOrder(2 ^ index + 1); //left
    preOrder((2 ^ index) + 2); //right
}

2 个答案:

答案 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);
 }