【问题标题】:Calculating the number of black nodes in each path in Red Black Tree计算红黑树中每条路径的黑色节点数
【发布时间】:2021-08-28 07:20:54
【问题描述】:

我应该使用什么递归算法来计算每条路径中的黑色节点数?

【问题讨论】:

  • 使用递归执行此操作时遇到什么问题?顺便说一句:如果这确实是一棵红背树,您只需为 一个 路径执行此操作,因为可以保证所有路径的此数字都相同。
  • 我会说规范的方法是递归遍历树并在找到黑色节点时增加黑色节点计数器。

标签: algorithm recursion red-black-tree


【解决方案1】:

在红黑树中,任何路径上的黑色节点的数量都是恒定的。该过程可以分为两部分。

第 1 部分:获取路径。在这里,路径被定义为一系列节点。

要从空树中获取路径,请返回仅包含空树的路径。

要从非空树中获取路径,请获取其左子树的路径并将非空树附加到此路径。

第 2 部分:计算路径中黑色节点的数量。

希望这个是不言自明的。

【讨论】:

    【解决方案2】:

    我应该使用什么递归算法来计算每条路径中的黑色节点数?

    没有。使用迭代方法。因此,如果您从根开始,每次看到包含根的黑色节点时,将初始化为 0 的计数器递增,并继续向左移动,直到左节点指针为空。无论计数是多少,这都是任何给定路径下的黑色深度。在伪代码中:

    int bcount = 0;
    Node *currnode = GetRoot();
    
    while (currnode != NULL)
    {
      if (currnode->GetColour() == BLACK)
         ++bcount:
      currnode = currnode->Left();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-18
      • 2014-01-13
      • 2017-03-02
      • 2014-03-16
      • 2020-10-03
      • 2015-11-17
      • 1970-01-01
      • 2014-01-15
      相关资源
      最近更新 更多