• 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. };

  • 相关阅读:
    NXOPEN二次开发-CAM Operation转OperationBuilder对加工操作修改一些进给速度参数
    35分钟了解sql注入-盲注(三)
    风控ML[16] | 风控建模中怎么做拒绝推断
    Unity3D 检测鼠标位置的Sprite像素颜色
    CCC联盟——UWB MAC(一)
    京东API接口详情
    DevStream 成为 CNCF Sandbox 项目啦!- 锣鼓喧天、鞭炮齐鸣、红旗招展、忘词了。
    PHP反序列化漏洞
    你知道什么是Oracle嘛
    训练营第二十七天 | 491.递增子序列46.全排列47.全排列 II332.重新安排行程51. N皇后
  • 原文地址:https://blog.csdn.net/qing2019/article/details/126383117