有序数组转化成二叉搜索数

本文介绍了一种将有序数组转换为二叉搜索树的方法。通过递归地选取数组中间元素作为根节点,实现平衡二叉搜索树的构建。这种方法能够有效提高树的密度并降低深度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在网上看到一家公司的笔试题:

这里就不带大家看概念了,什么是二叉搜索树?

下面直接看代码

 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 = 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))

 

转载于:https://www.cnblogs.com/Magiccwl/p/7040371.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值