当前位置: 首页 > 知识库问答 >
问题:

将二叉查找树转换为数组BFT

鲜于阳成
2023-03-14

我希望将二叉树表示为数组,以便数组在数组中表示为空的广度一阶。我不想使用数组列表,但很乐意使用链表结构。我发现数组的最大大小的大小将是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个答案

胡云瀚
2023-03-14

一些伪代码:

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,该方法将在数组中以相同的方式设置它,但不会进一步递归。

徐昆
2023-03-14

您可以尝试创建一个Node类并拥有父类、左子类、右子类、值和位置等实例变量。

这里的位置与值不同,因为您希望在图中所示的结构中出现空值。

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

 类似资料:
  • 下面给出了二叉树的实现。 如图中所示,树不是完整的二叉树。如何编写一个函数,将上述二叉树转换为完整的二叉树,只需将字符串数据节点添加到没有子节点的节点,即可生成完整的二叉树。 我将手动在代码中添加节点,以获得如下结果树: 但是,如何编写一个函数,它将采取根节点和返回树,这是完整的二叉树。

  • 我正在研究“将排序数组转换为具有最小高度的二叉搜索树”,它问: 给定一个排序(递增顺序)数组,将其转换为最小高度的二叉树。 我无法找到为什么我的递归没有像我预期的那样停止。当7通过时,它应该停止,并且不会再次打印出7。我还发现了一个类似的答案,看起来使用了和我相同的策略,但效果很好。(我不认为我的问题与上面列出的问题重复,但我仍然想感谢您为我链接这些问题。他们给了我更多解决问题的想法。) 我的代码

  • 主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:

  • 我正在努力实现二叉搜索树。完成实现所需的功能之一是重新平衡功能。 根据规范,该功能的工作方式如下: rebalance() 方法应创建一个平衡树,从而将偏度降低为零。平衡树是指在整个树中,左子树和右子树的大小相差不超过1(即,每个子树也是平衡的)。 为了平衡树,rebalance() 方法应反复将根值移动到较小的子树,并将最小/最大值从较大的子树移动到根,直到树平衡。然后,它应该以递归方式平衡两个

  • 本文向大家介绍python 将有序数组转换为二叉树的方法,包括了python 将有序数组转换为二叉树的方法的使用技巧和注意事项,需要的朋友参考一下 题目:将[0,1,2,3,4,5,6,7,8,9,10]存储到二叉树,原数组有序,转换为二叉排序树。 二叉排序树的特点:当前节点的左子树上的所有节点都小于该节点,右子树上的所有节点都小于该节点。 二叉排序也称为二叉查找树。 我的实现思路: 取有序数组的

  • 我如何转换使用以下代码,我的二叉树到一个简单的链表。这也许可以用递归来完成。 因此,如果根为NULL,也就是,如果函数没有收到有效的指针,则返回错误消息。 如果根是叶,这是,如果左子节点和右子节点都为NULL,您必须将其添加到叶节点列表中。