检查树是否具有交替属性

时间:2012-10-22 05:38:56

标签: algorithm tree

假设存在树,其中树的每个节点是白色或黑色,并且对于每个内部节点,其子节点是该内部节点的相反颜色。因此,如果树被勾勒出来,那么“顶级”将由(比如说)黑色节点组成,然后是下一级所有白色节点,然后是下一级所有黑色节点,依此类推。

是否存在任何算法,如果树的根x,可以检查该树是否符合这些标准?

2 个答案:

答案 0 :(得分:1)

是。递归深度优先遍历应该相当容易。在每个节点上放一个方法,检查它的所有子节点是否有不同的颜色,并且当它们调用这个checker函数时,它的所有子节点都返回true。

答案 1 :(得分:0)

使用dept首先搜索,很容易知道被访问的当前节点的部门。 然后根据根节点的值,您可以轻松检查当前节点是黑色还是白色:

如果根是黑色的(并且根的深度设置为0)则所有偶数深度节点都需要为黑色,奇数深度节点需要为白色,反之则为白色根。

请注意,您需要访问所有节点以验证树是否符合条件,因此最佳复杂度为O(n)