将二进制搜索树转换为数组BFT

时间:2014-10-24 17:49:44

标签: java arrays algorithm tree heap

我希望将二叉树表示为数组,以使数组处于广度优先顺序,其中数组中表示空值。我想要使用数组列表,但很乐意使用链表结构。我发现数组最大大小的大小为2 ^ n - 1,其中n是以下情况下树的高度:

            5
          /   \
        4       6
      /  \     / \
     3    x   x   7
    /\   /\  /\   /\
   x  x x x x x  x  8


[5, 4, 6, 3, null, null, 7, null, null, null, null, null, null, null, 8]

数组的最小大小(除了空树或没有子项的根[相应大小为0和3])将是(2 ^ n - 1) - 6,其中6可以计算为数字在这种情况下,前一级别的空值乘以2:

            5
          /   \
        4       6
      /  \     / \
     3    x   x   x
    /\   
   2  x 

[5, 4, 6, 3, null, null, null, 2, null]

这些树是否可以表示为root在索引0处的堆,而当前节点在索引i处的左子节点是2i + 1,而右子节点是2i + 2?

是否有一个递归方法来检查左右节点?

任何人都可以帮助/提供伪代码,只使用树和数组来帮助实现它吗?

2 个答案:

答案 0 :(得分:0)

你可以尝试创建一个Node类,并拥有像父,左子,右子,值和位置这样的实例变量。

此位置与值不同,因为您希望在结构中显示空值,如图中所示。

位置表示节点在树中的位置,值表示实际节点值。

答案 1 :(得分:0)

一些伪代码:

putInArray(node, index)
  array[index] = node
  if(node)
    putInArray(node->left, 2*index+1)
    putInArray(node->right, 2*index+2) 

您可以使用putInArray(root,0)调用它。如果node为null,则该方法将在数组内部以相同的方式设置它,但不会进一步递归。

相关问题