• 998. Maximum Binary Tree II


    maximum tree is a tree where every node has a value greater than any other value in its subtree.

    You are given the root of a maximum binary tree and an integer val.

    Just as in the previous problem, the given tree was constructed from a list a (root = Construct(a)) recursively with the following Construct(a) routine:

    • If a is empty, return null.
    • Otherwise, let a[i] be the largest element of a. Create a root node with the value a[i].
    • The left child of root will be Construct([a[0], a[1], ..., a[i - 1]]).
    • The right child of root will be Construct([a[i + 1], a[i + 2], ..., a[a.length - 1]]).
    • Return root.

    Note that we were not given a directly, only a root node root = Construct(a).

    Suppose b is a copy of a with the value val appended to it. It is guaranteed that b has unique values.

    Return Construct(b).

    Example 1:

    Input: root = [4,1,3,null,null,2], val = 5
    Output: [5,4,null,1,3,null,null,2]
    Explanation: a = [1,4,2,3], b = [1,4,2,3,5]
    

    Example 2:

    Input: root = [5,2,4,null,1], val = 3
    Output: [5,2,4,null,1,null,3]
    Explanation: a = [2,1,5,4], b = [2,1,5,4,3]
    

    Example 3:

    Input: root = [5,2,3,null,1], val = 4
    Output: [5,2,4,null,1,3]
    Explanation: a = [2,1,5,3], b = [2,1,5,3,4]

    题目:创建最大树,给定一颗最大二叉树,和一个值val, 将val以最右的形式插入二叉树。

    思路:因为val是在构建二叉树的数组最后,因此在二叉树中往右子树找,找到最后一个比val大的节点。将其右子树改为新建节点的左子树,新建节点为其右子节点。代码:

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. TreeNode* insertIntoMaxTree(TreeNode* root, int val) {
    15. TreeNode* node = new TreeNode(val);
    16. if(root && root->val < val) {
    17. node->left = root;
    18. return node;
    19. }
    20. TreeNode* nd = root;
    21. while(nd && nd->right && nd->right->val > val)
    22. nd = nd->right;
    23. node->left = nd->right;
    24. nd->right = node;
    25. return root;
    26. }
    27. };

  • 相关阅读:
    python数据分析-matplotlib绘制折线图
    【二叉树】最大二叉树
    Android混合式开发框架搭建集成Flutter3.0.1
    鸿蒙HarmonyOS实战-Stage模型(应用上下文Context)
    04-二维数组的查找
    【LeetCode刷题(数据结构)】:二叉树的前序遍历
    【2023年新版】40套BIM+GIS项目案例合集,中建中铁中交企业内部学习资源免费领取
    【深入浅出imx8企业级开发实战 | 01】imx8qxp yocto工程构建指南
    博客之站项目测试报告
    android 快速实现 圆角矩形控件 及 圆形控件
  • 原文地址:https://blog.csdn.net/qing2019/article/details/126383117