业务连续性经理需要了解的技术趋势
注意在以上代码中我们取了左孩子的返回值,右孩子的返回值,即left 和 right, 以后推导中间节点的状态 如何隔两个节点放一个摄像头 此时需要状态转移的公式,大家不要和动态的状态转移公式混到一起,本题状态转移没有择优的过程,就是单纯的状态转移! 来看看这个状态应该如何转移,先来看看每个节点可能有几种状态: 有如下三种:
我们分别有三个数字来表示:
大家应该找不出第四个节点的状态了。 一些同学可能会想有没有第四种状态:本节点无摄像头,其实无摄像头就是 无覆盖 或者 有覆盖的状态,所以一共还是三个状态。 因为在遍历树的过程中,就会遇到空节点,那么问题来了,空节点究竟是哪一种状态呢?空节点表示无覆盖?表示有摄像头?还是有覆盖呢? 回归本质,为了让摄像头数量最少,我们要尽量让叶子节点的父节点安装摄像头,这样才能摄像头的数量最少。 那么空节点不能是无覆盖的状态,这样叶子节点就要放摄像头了,空节点也不能是有摄像头的状态,这样叶子节点的父节点就没有必要放摄像头了,而是可以把摄像头放在叶子节点的爷爷节点上。 所以空节点的状态只能是有覆盖,这样就可以在叶子节点的父节点放摄像头了 接下来就是递推关系。 那么递归的终止条件应该是遇到了空节点,此时应该返回2(有覆盖),原因上面已经解释过了。
代码如下: 此时,大体思路就是从低到上,先给叶子节点父节点放个摄像头,然后隔两个节点放一个摄像头,直至到二叉树头结点。 此时这道题目还有两个难点:
确定遍历顺序 在二叉树中如何从低向上推导呢? 可以使用后序遍历也就是左右中的顺序,这样就可以在回溯的过程中从下到上进行推导了。
后序遍历代码如下: (编辑:通化站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |