data-structures - 使用数组表示的二叉树

标签 data-structures binary-tree

考虑下面的数组,它声称代表了一个二叉树:

[1, 2, 5, 6, -1, 8, 11]

鉴于值为 -1 的索引表示根元素,我有以下问题:

a) 这实际上是如何表示的?

我们是否应该遵循以下公式( source from this link )来计算树?
三个简单的公式允许您从父项的索引到其子项的索引,反之亦然:

* if index(parent) = N, index(left child) = 2*N+1
* if index(parent) = N, index(right child) = 2*N+2
* if index(child) = N, index(parent) = (N-1)/2 (integer division with truncation)

如果我们使用上面的公式,那么index(root) = 3, index(left child) = 7,不存在。

b) 知道它是否是一棵完整的二叉树很重要吗?

最佳答案

N=0 必须是根节点,因为根据列出的规则,它没有父节点。 0 不能从表达式 (2*N + 1) 或 (2*N + 2) 中的任何一个创建,假设没有负 N。

注意,索引不是数组中存储的值,而是数组中的位置。
对于 [1, 2, 5, 6, -1, 8, 11]
索引 0 = 1
索引 1 = 2
索引 2 = 5,以此类推。

如果它是一棵完整的树,那么 -1 是一个有效值,树是

    1  
   /  \  
  2    5  
 / \  / \  
6 -1 8  11  

-1 也可以是“NULL”指针,表示该节点不存在任何值。

所以树看起来像
    1  
   / \  
  2   5  
 /   / \  
6   8  11  

关于data-structures - 使用数组表示的二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256222/

相关文章:

java - 模式评估器

java - 实现具有多个 parent 和 child 的图表

我可以使用 union 来表达结构体和多个打包成员吗?

javascript - 在通用树中查找元素

recursion - Prolog 树中给定深度的节点数

c++ - 二叉树 - 仅打印左分支 - 使用后序遍历 - C++

java - java实现通用链表添加方法

arrays - Perl:从数组创建哈希

c# - 如何找到两个数组的交集(最佳解决方案)

c++ - 为二叉树编写 remove() 函数