#3913. 奇异树庄探秘

奇异树庄探秘

🐰😺🏚️ 兔猫信奥学院的奇异树庄探秘 🏚️😺🐰

小兔和小猫在信奥学院新发现的奇异树庄中侦查时,惊讶地发现这里的房屋排列正好构成一棵二叉树,入口房屋就是根节点 root。传说这片树庄布满了魔法护罩:

任何一对直接相连的房屋若在同一晚被闯入,就会触发全庄警报。

聪明的小兔决定化身“魔法小偷”,在保证不触动警报的前提下,究竟能盗取到多少金币?每栋房子上都刻有一个非负整数值 val,表示那天能偷到的金币数。只要你偷了某个房子,就不能偷它的父或子,否则警报大作。


输入格式

第一行:整数 n,表示房屋(节点)总数。
第二行:n 个整数 vals[i],用空格分隔,表示按完全二叉树层序排列的每个节点的偷盗价值。
  • 房屋编号按层序 0…n-1,对应数组下标;
  • 对于下标 i,
    • 左子房屋在 2·i+1 号(若 < n);
    • 右子房屋在 2·i+2 号(若 < n)。
  • 1 ≤ n ≤ 10⁴
  • 0 ≤ vals[i] ≤ 10⁴

输出格式

输出一个整数,表示在不触警报的前提下,一晚能偷到的最高金币总数。


7
3 2 3 0 3 0 1
7
  • 树形可视化:
       3
     /   \
    2     3
   / \   / \
  0   3 0   1
  • 最优方案:偷 3(root) + 3(左子右孙) + 1(右子右孙) = 7。

7
3 4 5 1 3 0 1
9
  • 树形:
       3
     /   \
    4     5
   / \   / \
  1   3 0   1
  • 最优偷法:偷 4 + 5 = 9。

🎓 加菲老师寄语:
利用“二叉树打家劫舍”技巧,递归返回「偷」/「不偷」两种状态,你就能瞬间算出在魔法树庄里最安全的偷盗总量!祝探秘成功!