leetcode654:最大二叉树
-
题目:给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 最大二叉树
-
思路:构造一个built函数,返回数组中值最大的为最大二叉树的根节点,继续遍历以根节点为边界的左右两个数组,遍历循环返回的根节点分别为上一个父根节点的左右子树节点。
class Solution { public TreeNode constructMaximumBinaryTree(int[] nums) { return build(nums,0,nums.length-1); } TreeNode build(int[] nums,int lo,int high){ if(lo>high){ return null; } int index = -1; int maxValue = Integer.MIN_VALUE; for(int i = lo;i<=high;i++){ if(nums[i]>maxValue){ index=i; maxValue = nums[i]; } } TreeNode root = new TreeNode(maxValue); root.left = build(nums,lo,index-1); root.right = build(nums,index+1,high); return root; } }