998. Maximum Binary Tree II

爱被打了一巴掌 2024-04-08 09:28 172阅读 0赞

A 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:

f92e0c5b0f987e9759b9c58b04d7614c.jpeg

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

Example 2:

3edbe77d42b0fc74f6ed5e15819b15b6.jpeg

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

Example 3:

7e80bee7e1792445784c31cc6e6d7334.jpeg

  1. Input: root = [5,2,3,null,1], val = 4
  2. Output: [5,2,4,null,1,3]
  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. };

发表评论

表情:
评论列表 (有 0 条评论,172人围观)

还没有评论,来说两句吧...

相关阅读