Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 树和优先级队列_Algorithm_Binary Tree - Fatal编程技术网

Algorithm 树和优先级队列

Algorithm 树和优先级队列,algorithm,binary-tree,Algorithm,Binary Tree,我试图解决一个结果有点困难的练习,因为我必须从树的模板类(红黑或二进制搜索树)开始实现优先级队列 使用如下所示的模板 class Node int key Node left Node right Node parent int leftNodes int rightNodes 最初,当我必须插入一个新元素时,我尝试完全填充树的一个级别,然后使用InOrderTreetravers/Sort算法填充一个数组并从该数组生成一个BinarySearch树,并用新的根元素替换

我试图解决一个结果有点困难的练习,因为我必须从树的模板类(红黑或二进制搜索树)开始实现优先级队列

使用如下所示的模板

class Node
  int key
  Node left
  Node right
  Node parent
  int leftNodes
  int rightNodes
最初,当我必须插入一个新元素时,我尝试完全填充树的一个级别,然后使用InOrderTreetravers/Sort算法填充一个数组并从该数组生成一个BinarySearch树,并用新的根元素替换原始元素。假设结果是一棵平衡的树


不幸的是,这种方法似乎不合适,因为树必须模拟maxheap属性,在每次插入/删除时保持树的平衡(而且我的代码在完全填充树级别时没有很好地工作)。是否可以实现具有堆功能的树?我指的是一棵树,其中每个元素都大于或等于其子元素,插入后保持平衡,并且在删除根节点(较大的关键元素)时具有自动平衡功能?

您可能希望实现二进制堆,请参阅


IIRC这种数据结构的一个主要优点是它可以嵌入到一个数组中(因为它具有平衡性)。Heapsort使用这种数据结构进行就地排序。

就是您要查找的。使用红黑树可以在树上按值排序元素吗?添加或删除时旋转结构会导致树无序。我需要在根节点和逐级节点上使最大的元素小于或等于其父节点。但是我必须使用答案中给出的类节点,而不是用于存储节点的数组。很抱歉混淆了。链接的Wikipedia文章描述了树形式的算法,请参见“插入”和“删除”部分。在数组中嵌入只是一种优化,与此无关(但它有助于此数据结构的重要性)。