「每日LeetCode」2021年5月28日

本文最后更新于:2023年3月19日 晚上

Lt872. 叶子相似的树

872. 叶子相似的树

请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 **叶值序列  **。

举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 *叶相似  *的。
如果给定的两个根结点分别为 root1root2 的树是叶相似的,则返回 true;否则返回 false

示例 1:

1
2
输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]
输出:true

示例 2:

1
2
输入:root1 = [1], root2 = [1]
输出:true

示例 3:

1
2
输入:root1 = [1], root2 = [2]
输出:false

示例 4:

1
2
输入:root1 = [1,2], root2 = [2,2]
输出:true

示例 5:

1
2
输入:root1 = [1,2,3], root2 = [1,3,2]
输出:false

提示:

  • 给定的两棵树可能会有 1200 个结点。
  • 给定的两棵树上的值介于 0200 之间。

思路

后序遍历得到叶子节点数组,逐一比较是否相同即可。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @param {number} n
* @return {number}
*/
var totalMoney = function (n) {
const set = [1, 3, 6, 10, 15, 21, 28];
let week = Math.ceil(n / 7);
const day = n % 7;
if (day === 0) week++;
return (
28 * (week - 1) +
((week - 1) * (week - 2) * 7) / 2 +
(day >= 1 ? set[day - 1] : 0) +
day * (week - 1)
);
};