我希望将二叉树表示为数组,以使数组处于广度优先顺序,其中数组中表示空值。我不想要使用数组列表,但很乐意使用链表结构。我发现数组最大大小的大小为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?
是否有一个递归方法来检查左右节点?
任何人都可以帮助/提供伪代码,只使用树和数组来帮助实现它吗?
答案 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,则该方法将在数组内部以相同的方式设置它,但不会进一步递归。