【C语言】覆盖二叉树的最少节点个数
前几天学习完了Tree的知识,发现了一道很有意思的题,给定一个二叉树,并且已知每个节点可以覆盖它的左孩子,右孩子以及parent,求最少选择几个节点可以覆盖整个二叉树?
这是原来的题目:
## 在写代码之前真的想到头秃,试写了大概3,4个版本吧,走后找到一个比较简单解法
思路:对于二叉树的每一个leaf而言,如果我们想要覆盖他的话可以有两种方法,第一种是覆盖他本身,第二种是覆盖他的parent,显然覆盖parent的话会有效率的多,因为还有一定的机率可以覆盖到parent的parent,以及parent的另一个孩子,然后我们可以把parent当作下一次覆盖的leaf,直到全部覆盖完成为止
话不多说,直接上代码
#include <stdio.h>
#include <stdlib.h>
/*
0: not covered
1: put a camera
2: covered
*/
int RES=0;
int main()
{
int