998. 最大二叉树 II
https://leetcode.cn/problems/maximum-binary-tree-ii/ 最大树 定义:一棵树,并满足:其中每个节点的值都大于其子树中的任何其他值。 给你最大树的根节点 root 和一个整数 val 。 就像 之前的问题 那样,给定的树是利用 Construct (a) 例程从列表 a(root = Construct (a))递归地构建的: 如果 a 为空,返回 null 。 否则,令 a [i] 作为 a 的最大元素。创建一个值为 a [i] 的根节点 root 。 root 的左子树将被构建为 Construct ([a [0], a [1], …, a [i - 1]]) 。 root 的右子树将被构建为 Construct ([a [i + 1], a [i + 2], …, a [a.length - 1]]) 。 返回 root 。 请注意,题目没有直接给出 a ,只是给出一个根节点 root = Construct (a) 。 假设 b 是 a 的副本,并在末尾附加值 val。题目数据保证 b 中的值互不相同。 返回 Construct (b) 。 示例 1:
输入:root = [4,1,3,null,null,2], val = 5
输出:[5,4,null,1,3,null,null,2]
解释:a = [1,4,2,3], b = [1,4,2,3,5]示例 2:
输入:root = [5,2,4,null,1], val = 3
输出:[5,2,4,null,1,null,3]
解释:a = [2,1,5,4], b = [2,1,5,4,3]示例 3:
输入:root = [5,2,3,null,1], val = 4
输出:[5,2,4,null,1,3]
解释:a = [2,1,5,3], b = [2,1,5,3,4]提示:
- \(树中节点数目在范围 [1, 100] 内 \)
- \(1 <= Node.val <= 100\)
- \(树中的所有值 互不相同 \)
- \(1 <= val <= 100\)
# 题解
因为 val 是附加在末尾的,所以根据题意,如果 val 大于 a 中所有值,那只需要将整个 a 作为以 val 为根节点的左子树即可得到 b;否则就在 a 的右子树中找到小于 val 的节点值,将值为 val 的节点插在此处并将该节点及其子树作为 val 节点的左子树即可。
class Solution { |
复杂度分析:
- 时间复杂度:\(O (n)\)
- 空间复杂度:\(O (1)\)
Invitation
x-17
202111170521
created:2021/11/17
Welcome to X
月缺不改光,剑折不改钢
共矜然诺心,各负纵横志
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 潇十七!
评论