【发布时间】:2013-05-16 20:08:53
【问题描述】:
我正在尝试解决一个有点困难的练习,因为我必须从树的模板类(一种 RedBlack 或 BinarySearch 树)开始实现优先级队列。
使用看起来像的模板
class Node
int key
Node left
Node right
Node parent
int leftNodes
int rightNodes
最初,当我必须插入一个新元素时,我尝试完全填充树的一个级别,然后使用 InOrderTreeTRaversal/Sort 算法填充一个数组并从该数组生成一个 BinarySearch 树并用新的根元素替换原来的。假设结果是一棵平衡树。
不幸的是,这种方法似乎不合适,因为树必须模拟 maxheap 属性 为每次插入/删除维护 平衡 树(而且我的代码在填充时效果不佳完全是树级别)。有可能实现具有堆功能的树吗?我的意思是一棵树,它的每个元素都大于或等于它的子元素,在插入后保持平衡,并且在删除根节点(更大的关键元素)时具有自动平衡功能?
【问题讨论】:
-
Red Black Tree 是您要找的。span>
-
使用红黑树可以在树上有按值排序的元素吗?添加或删除时旋转结构会导致树无序。我需要在根节点有最大的元素,并且逐级节点小于或等于其父节点。
标签: algorithm binary-tree