建设基站

题目描述

给定一棵二叉树,每个节点代表一户居民。

你可以在树的任意节点上建设基站。一个建在节点 u 上的基站,可以覆盖节点 u 本身、u 的父节点(如果存在)以及 u 的所有直接子节点。

你的任务是,计算出最少需要建设多少个基站,才能使得树上的所有节点都被信号覆盖。

输入格式

输入为一行,包含一个或多个用空格分隔的字符串,代表一棵二叉树的层序遍历(广度优先遍历)序列。

  • 正整数表示该位置有一个节点,其值为该整数。
  • N 表示该位置为空节点(null)。

输出格式

输出一个整数,表示覆盖整棵树所需的最少基站数量。

样例

样例输入 1

1 2 3 4 N 5 6

样例输出 1

2

样例输入 2

1 2 N 3 N N 4

样例输出 2

2

提示

样例 1 解释

输入 1 2 3 4 N 5 6 对应如下的二叉树结构:

      1
     / \
    2   3
   /   / \
  4   5   6

一种最优的方案是在节点 2 和 5 上建设基站:

  • 在节点 2 建站:覆盖 1, 2, 4。
  • 在节点 5 建站:覆盖 3, 5, 6。 所有节点均被覆盖,共需 2 个基站。

样例 2 解释

输入 1 2 N 3 N N 4 对应如下的二叉树结构:

      1
     /
    2
   /
  3
 /
4

一种最优的方案是在节点 2 和 4 上建设基站。共需 2 个基站。

数据范围与约定

  • 输入序列中的元素总数(包括 N)在 $$ 范围内。
  • 节点值为正整数。