首页 > 代码库 > 有序数组转化成二叉搜索数
有序数组转化成二叉搜索数
今天在网上看到一家公司的笔试题:
这里就不带大家看概念了,什么是二叉搜索树?
下面直接看代码
1 //an order arr to binary search tree 2 (function(){ 3 function main(arr){ 4 var node = {}; 5 if(arr.length <= 1) 6 return {data:arr[0]}; 7 var flag = Math.floor(arr.length/2); 8 node.data =http://www.mamicode.com/ arr[flag]; 9 var leftArr = arr.slice(0,flag); 10 var rightArr = arr.slice(flag+1); 11 node.leftSubTree = main(leftArr); 12 node.rightSubTree = main(rightArr); 13 return node; 14 } 15 var _arr = [1,2,3,4,5,6,7,8,9]; 16 console.log(main(_arr)); 17 })()
看结果:
解释思路:
- 由于是有序的数组,所以可以使用折半的方法,将一块一块的数据分割,通常的构造二叉搜索树的方法是,逐个比较,逐个按顺序添加,如果是有序的,可想使用这种方法,查询树就成了反斜线了。
- 使用这种折半的方法可以增加数的密度,减少数的深度;
- 上面的折半的递归方法有点像快排,每一次都将各个分段递归,同时时间复杂度也是(O(nlog2n))
有序数组转化成二叉搜索数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。