关于二叉树结点的着色问题~
现在有一颗二叉树,初始化的结点都是白色的,现在需要把若干个结点涂成黑色,使得不会出现父结点和它的两个非空孩子结点都是白色用二进制表示二叉树的状态
1表示进行先序深度遍历,0表示叶子结点
例如
1100100的二叉树形态是
#
/ \
o o
只要对根结点#进行着色一次操作就可以了
例如
1110010011000
对应的二叉树形态是
o
/ \
# o
/ \ / \
o o o NULL
这个只要对#结点进行着色就可以了
输入:一个长度小于等于100的二进制数
输出:最少操作次数
还有版本2的
每次对结点进行着色操作都会改变操作结点以及它的非空孩子结点的颜色,如果该结点原色是白色则会变成黑色,如果该结点原色是黑色,则会重新变回白色,并且初始化已经有若干个结点是黑色的,问最少多少次操作才能把所有结点变成黑色?
用w表示白色,b表示黑色,#表示叶子结点(已知结点小于等于100个)
输出最少操作次数
例如:
输入:ww##bb##w##
输出:3
这个问题看上去不是很难,但感觉比较好玩~我虽然找到方法,但不太会证明该方法的正确性,发出来看看怎么理解?~
[此贴子已经被作者于2018-6-9 16:03编辑过]