小红的二叉树构造
[题目链接](https://www.nowcoder.com/practice/f798461d82c94959a1922efda1dd05eb)
思路
要构造一棵 层的满二叉树,使得每一层的节点权值和都相等。
关键观察:第 层(从
开始计数)有
个节点。设每层权值和为
,则第
层每个节点的平均权值为
。为了让所有节点权值都是正整数,
必须是
的倍数(因为最后一层有
个节点)。
最简单的构造方案:取 ,则第
层的每个节点权值为
。
- 第
层(根节点):权值为
- 第
层:每个节点权值为
- ...
- 第
层(叶子层):每个节点权值为
这样每一层的权值和都是 ,满足条件。
样例演示
输入 ,
:
- 第
层:
(和 =
)
- 第
层:
(和 =
)
- 第
层:
(和 =
)
输出 {4,2,2,1,1,1,1},是一个合法解。题目示例的 {5,2,3,1,2,1,1} 也是合法解,有多解时返回任意一个即可。
代码
class Solution {
public:
TreeNode* create(int n) {
return build(0, n);
}
TreeNode* build(int level, int n) {
if (level >= n) return nullptr;
int val = 1 << (n - 1 - level);
TreeNode* node = new TreeNode(val);
node->left = build(level + 1, n);
node->right = build(level + 1, n);
return node;
}
};
import java.util.*;
public class Solution {
public TreeNode create (int n) {
return build(0, n);
}
private TreeNode build(int level, int n) {
if (level >= n) return null;
int val = 1 << (n - 1 - level);
TreeNode node = new TreeNode(val);
node.left = build(level + 1, n);
node.right = build(level + 1, n);
return node;
}
}
复杂度分析
- 时间复杂度:
。需要构造满二叉树的所有节点,共
个。
- 空间复杂度:
。存储整棵满二叉树需要
个节点,递归栈深度为
。

京公网安备 11010502036488号