998. 最大二叉树 II
Posted zccfrancis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了998. 最大二叉树 II相关的知识,希望对你有一定的参考价值。
最大树定义:一个树,其中每个节点的值都大于其子树中的任何其他值。
给出最大树的根节点 root。
就像之前的问题那样,给定的树是从表 A(root = Construct(A))递归地使用下述 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 <= B.length <= 100
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-binary-tree-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
根据示例可以看出附加值val加在数组末尾,即加在树的右边,只用考虑右子树。
如果val大于右子树原根结点,则原根放到新根左侧。如果小则在右子树迭代。
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public TreeNode insertIntoMaxTree(TreeNode root, int val) { 12 TreeNode node = new TreeNode(val); 13 node.left = null; 14 node.right = null; 15 if (root == null) 16 return node; 17 if (root.val < val) 18 { 19 node.left = root; 20 return node; 21 } 22 23 TreeNode p =root; 24 while (p.right != null && p.right.val > val) 25 p = p.right; 26 TreeNode temp = p.right; 27 p.right = node; 28 node.left = temp; 29 return root; 30 } 31 }
以上是关于998. 最大二叉树 II的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1470. 重新排列数组 / 654. 最大二叉树 / 998. 最大二叉树 II