Java 红黑树被任意定义为左倾。我怎样才能使它向右倾斜?

Java 红黑树被任意定义为左倾。我怎样才能使它向右倾斜?,java,binary-tree,binary-search-tree,red-black-tree,Java,Binary Tree,Binary Search Tree,Red Black Tree,正如标题所说,使用修改过的二进制搜索树创建的红黑树具有任意限制,即所有红色链接都是左倾的。我已经为红黑树(java)编写了一个基本程序,我很好奇如何改变它,因为它看起来很简单,但所有的解决方案我都找不到 我的代码与此PDF中的代码几乎相同: 例如,左倾版本中的树修复方法: private TreeNode<Key, Value> treeRepair(TreeNode<Key, Value> node) { if (isRed(node.right) &

正如标题所说,使用修改过的二进制搜索树创建的红黑树具有任意限制,即所有红色链接都是左倾的。我已经为红黑树(java)编写了一个基本程序,我很好奇如何改变它,因为它看起来很简单,但所有的解决方案我都找不到

我的代码与此PDF中的代码几乎相同:

例如,左倾版本中的树修复方法:

private TreeNode<Key, Value> treeRepair(TreeNode<Key, Value> node)
{
    if (isRed(node.right) && !isRed(node.left)) node = rotateLeft(node);
    if (isRed(node.left) && isRed(node.left.left)) node = rotateRight(node);
    if (isRed(node.left) && isRed(node.right)) flipColours(node);

    node.size = 1 + size(node.left) + size(node.right);

    return node; 
}
专用树节点树对(树节点)
{
if(isRed(node.right)和&!isRed(node.left))node=rotateLeft(node);
if(isRed(node.left)和&isRed(node.left.left))node=rotateRight(node);
if(isRed(节点左)和&isRed(节点右))flipcolors(节点);
node.size=1+大小(node.left)+大小(node.right);
返回节点;
}
这个很好用。它在每次插入和删除结束时运行。 这是一个经过修改的“翻转”版本,它实际上在某些时候是有效的

private TreeNode<Key, Value> treeRepair(TreeNode<Key, Value> node)
{   
    if (isRed(node.left) && !isRed(node.right)) node = rotateRight(node);
    if (isRed(node.right) && isRed(node.right.right)) node = rotateLeft(node);  
    if (isRed(node.left) && isRed(node.right)) flipColours(node);

    node.size = 1 + size(node.left) + size(node.right);

    return node; 
}
专用树节点树对(树节点)
{   
if(isRed(node.left)&&!isRed(node.right))node=rotateRight(node);
if(isRed(node.right)和&isRed(node.right.right))node=rotateLeft(node);
if(isRed(节点左)和&isRed(节点右))flipcolors(节点);
node.size=1+大小(node.left)+大小(node.right);
返回节点;
}
我有一种强烈的预感,它与delete方法有关(它通常适用于大量插入,但一次删除会导致问题,例如一行中有多个红色链接)。但在该方法中翻转左键和右键不可避免地会产生NPE


如果这是一个很糟糕的问题,请告诉我。

你有什么真正的原因吗?还是仅仅为了它自己?我不得不说,我想不出任何情况下你会真的需要这个。我正在努力更好地掌握红黑树的实际工作原理,我是个新手。如果你将每个
切换到
,反之亦然,并保持你现在使用的顺序,我看不出它怎么会不起作用,因为它是完全对称的,所以你只需要交换顺序关系。然后,树仍然向左倾斜,但值将按顺序排列reverse@Cruncher我不是这么说的。OP希望它是右倾的而不是左倾的可能是有原因的,例如,因为他/她希望有更接近根的小值。我想说的是,我不明白为什么最简单的方法不起作用(切换顺序关系)