美文网首页
654. 最大二叉树

654. 最大二叉树

作者: 衣锦昼行 | 来源:发表于2019-08-07 15:48 被阅读0次

    给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
    二叉树的根是数组中的最大元素。
    左子树是通过数组中最大值左边部分构造出的最大二叉树。
    右子树是通过数组中最大值右边部分构造出的最大二叉树。
    通过给定的数组构建最大二叉树,并且输出这个树的根节点。
    示例 :

    输入:[3,2,1,6,0,5]
    输出:返回下面这棵树的根节点:
      6
      / \
     3   5
       \  /
      2 0
       \
       1

    提示:

    给定的数组的大小在 [1, 1000] 之间。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode constructMaximumBinaryTree(int[] nums) {
            int pos = maxPos(nums);
            if(pos == -1)
                return null;
            int[] leftArray = Arrays.copyOfRange(nums,0,pos);
            int[] rightArray = Arrays.copyOfRange(nums,pos+1,nums.length);
            TreeNode root = new TreeNode(nums[pos]);
            root.left = constructMaximumBinaryTree(leftArray);
            root.right = constructMaximumBinaryTree(rightArray);
            return root;
        }
        private int maxPos(int[] nums){
            if(nums.length == 0)
                return -1;
            int pos=-1;
            int maxn = -1;
            for(int i = 0;i < nums.length;i++){
                if(maxn < nums[i]){
                    maxn =nums[i];
                    pos = i;
                }
            }
            return pos;
        }
    }
    

    相关文章

      网友评论

          本文标题:654. 最大二叉树

          本文链接:https://www.haomeiwen.com/subject/saaodctx.html