zoukankan      html  css  js  c++  java
  • 有序数组转化成二叉搜索数

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

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

    下面直接看代码

     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))
  • 相关阅读:
    Markdown学习
    二叉树的最近公共祖先
    javaCompiler简析
    自定义类加载器
    聚合和组合的区别
    拓扑排序
    C++ map和unordered_map
    静态文件加载路径
    文件上传
    jackson
  • 原文地址:https://www.cnblogs.com/Magiccwl/p/7040371.html
Copyright © 2011-2022 走看看