Algorithm 红黑树插入:为什么在插入节点时使节点变为红色?

Algorithm 红黑树插入:为什么在插入节点时使节点变为红色?,algorithm,data-structures,tree,binary-search-tree,red-black-tree,Algorithm,Data Structures,Tree,Binary Search Tree,Red Black Tree,在红黑树中,属性不包含任何关于插入节点颜色的规则,不管我们是如何始终插入红色节点的 如果我们插入黑色节点,它是否违反任何属性(4中的任何规则) 是的!假设树中只有一个节点: 5 (black) 现在在树中插入一个新的黑色节点: 5 (black) \ 9 (black) 现在,树中每个根空路径都有相同数量的黑色节点的不变量被打破,因为从左根开始的路径有一个黑色节点,而从右根开始的路径各有两个 希望这有帮助 你似乎在问两个问题 1) 为什么在插入节点时(在

在红黑树中,属性不包含任何关于插入节点颜色的规则,不管我们是如何始终插入红色节点的


如果我们插入黑色节点,它是否违反任何属性(4中的任何规则)

是的!假设树中只有一个节点:

    5 (black)
现在在树中插入一个新的黑色节点:

    5 (black)
     \
      9 (black)
现在,树中每个根空路径都有相同数量的黑色节点的不变量被打破,因为从左根开始的路径有一个黑色节点,而从右根开始的路径各有两个


希望这有帮助

你似乎在问两个问题

1) 为什么在插入节点时(在标题中)使节点变为红色

2) 插入为黑色是否违反任何属性

你似乎还错误地认为2)的“是”答案是1)的自动理由

事实并非如此!以红色插入节点也可能违反RB树属性之一。例如,如果将红色节点设为另一个红色节点的子节点,则违反了红色节点只能具有黑色子节点的属性

将其变为红色的原因是,修复子节点属性(通过旋转和重新绘制父节点/祖父母节点)比尝试修复路径长度属性“更容易”。也许另一个原因是,这就是作者提出的


也可以通过插入黑色节点而不重新绘制红色来修复树。也许还没有人考虑过这个问题。

简单而优雅的回答!