zoukankan      html  css  js  c++  java
  • 108、将有序数组转换为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

    本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

    示例:

    给定有序数组: [-10,-3,0,5,9],
    一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
    
          0
         / 
       -3   9
       /   /
     -10  5

     题解:

    二叉搜索树就是二叉排序树,本题要求同时是平衡二叉树,所以可以采用分治的思想,类似二分查找。

    /* C++ */

    vector<int>& nums) /*nums首先是个引用,引用的东西就是vector这个容器的变量,容器内部存着整型数据*/

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10  * };
    11  */
    12 class Solution {
    13 public:
    14     TreeNode* createBST(vector<int>& nums,int start,int end) {
    15         if(start>end) return nullptr; 
    16         if(end==start){ //数组只有一个元素,返回这个节点
    17             TreeNode* node = new TreeNode(nums[start]);
    18             return node;
    19         }else{
    20             int mid=(start+end)/2;
    21             TreeNode* node = new TreeNode(nums[mid]); //当前节点
    22             node->left = createBST(nums,start,mid-1); //递归当前节点左边的数组
    23             node->right = createBST(nums,mid+1,end); //递归当前节点右边的数组
    24             return node;
    25         }
    26     }
    27     TreeNode* sortedArrayToBST(vector<int>& nums){ 
    28         return createBST(nums,0,nums.size()-1);
    29     }
    30 };

     /* JavaScript */

    slice() 方法可从已有的数组中返回选定的元素,arrayObject.slice(start,end)
     1 /**
     2  * Definition for a binary tree node.
     3  * function TreeNode(val, left, right) {
     4  *     this.val = (val===undefined ? 0 : val)
     5  *     this.left = (left===undefined ? null : left)
     6  *     this.right = (right===undefined ? null : right)
     7  * }
     8  */
     9 /**
    10  * @param {number[]} nums
    11  * @return {TreeNode}
    12  */
    13 var sortedArrayToBST = function(nums) {
    14     if(nums.length === 0){
    15         return null;
    16     }else if(nums.length === 1){
    17         return new TreeNode(nums[0]);
    18     }else{
    19         var mid = parseInt(nums.length/2); /* 利用parseInt()转换为整数 */
    20         var root = new TreeNode(nums[mid]);
    21         root.left = sortedArrayToBST(nums.slice(0,mid)); 
    22         root.right = sortedArrayToBST(nums.slice(mid+1));
    23         return root;
    24     }
    25 };
  • 相关阅读:
    微信小游戏5.2.2 在子项目中使用EUI制作排行榜报错 wx.getFileSystemManager not function
    Egret5.2.2 微信小游戏行的示例排行榜
    Python翻译
    Python-docx库的使用
    用百度文字识别实现图片文本识别
    基于airtest的朋友圈自动点赞
    使用豆瓣源安装python包
    Appium 环境配置遇到的坑
    使用Pyppeteer进行gmail模拟登录
    异步爬虫
  • 原文地址:https://www.cnblogs.com/oaoa/p/14392478.html
Copyright © 2011-2022 走看看