创建一个自订购的二进制树
-
16-10-2019 - |
题
我有一个作业,我需要使用二进制搜索树并将其更改为自行订单本身,以便最多访问的项目(优先级更高)在树的顶部,根是最访问的节点。
这位教授给了我BST和节点结构,但是试图让我的头围绕算法更新树,因为插入了东西使我感到困惑。
我知道,随着插入的发生,它会检查当前节点的数据是否比当前节点更大或更大,然后递归地朝正确的方向行驶,直到找到空指针并在此处插入自身。插入后,将优先级提高了1。
template <class Type>
void BinarySearchTree<Type> :: insert( const Type & x, BinaryNode<Type> * & t )
{
if( t == NULL )
t = new BinaryNode<Type>( x, NULL, NULL );
else if( x < t->element )
insert( x, t->left );
else if( t->element < x )
insert( x, t->right );
else
t->priority++; // Duplicate; do nothing for right now
}
现在,我需要弄清楚节点何时相等,如何重新排序树,以使当前节点(谁等于已经存在的节点)找到现有节点,增加该节点的优先级,然后将其移动根是优先级。
我想我有一个想法,即AVL逻辑可以起作用,并且当发生轮班时,它将是右旋转或左右旋转。
这是我困惑的地方,真的不知道从哪里开始创建算法来解决问题。由于AVL算法可以跟踪树的平衡,然后相应地向左或向右旋转节点,因此这棵树不必担心保持平衡,只是优先级最高的节点没有更高优先级的孩子。
其他提示
看看张开树,它们确实是您所需要的。您将必须修改splay函数,而不是将每个访问的节点一直移至树,而要缓慢向上移动
不隶属于 cs.stackexchange