654. Maximum Binary Tree

654. Maximum Binary Tree

题目大意:

    意思就是给你一组数,先选一个最大的作为根,这个数左边的数组作为左子树,右边的数组作为右子树,重复上一步。

    读完就知道是递归了。

    这个题真尼玛恶心,对JavaScript的友好度简直为0,用Js的可以直接放弃了。

 

 1         function TreeNode(val) {
 2             this.val = val
 3             this.left = this.right = null
 4         }
 5 
 6         var constructMaximumBinaryTree = function(nums) {
 7             var ans = findmaxvalue(nums, 0, nums.length-1)
 8             return ans
 9         }
10 
11         function findmaxvalue(nums, l, r)
12         {
13             if(r < l) {
14                 return null;
15             }
16             var max = nums[l];
17             var maxpos = l;
18             for(var i=l+1;i<=r;i++)
19             {
20                 if(nums[i] > max) {
21                     maxpos = i
22                     max = nums[i]
23                 }
24 
25             }
26             var root = new TreeNode(max)
27             root.left = findmaxvalue(nums, l, maxpos-1)
28             root.right = findmaxvalue(nums, maxpos+1, r)
29             return root;
30         }

时间复杂度应该是小于n2的,但是我不知道这种方法的复杂度到底是多少,我猜是x(x可能是nlogn,我也不太清楚)。

如果用线段树的话,复杂度应该是x'(n < x' < x < n2

我提交了一下发现是错的,理论输出是一个数组,我tm甚至用BFS搜索了一下二叉树,加入到一个数组里了,然后我本来push为null的元素,测评机输出为一个数组???????气的一笔,随便找了份代码交了。

BFS代码:

        var ans = findmaxvalue(nums, 0, nums.length-1)
        var res = []
        var queue = []
        queue.push(ans)
        while(queue.length != 0) {
            var t = queue.shift()
            if(t != null) {
                res.push(t.val)
                if(t.left != null || t.right != null) {
                    queue.push(t.left)
                    queue.push(t.right)
                }
            }
            else {
                res.push(null)
            }
        }

 

posted @ 2018-01-19 11:15  swallowblank  阅读(119)  评论(0编辑  收藏  举报