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

    LeetCode-108-将有序数组转化为二叉搜索树

    题目

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

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

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

    思路

    这道题的标签属于深度优先搜索,但是我通过递归解决的,

    我的思路是这样的,左右子树的高度不超过1,表示左右子树中各节点的数量也不超过1;

    那么只要每次找到数组最中间的一个点作为根节点,左边的数字组成左子树,右边的数字组成右子树就搞定了;

    通过递归即可实现此二叉搜索树的构造,代码如下

    代码

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* sortedArrayToBST(vector<int>& nums) {
           int len = nums.size();
           int mid = len/2;
           if (len == 0) return NULL; 
           TreeNode* node = new TreeNode(nums[mid]);
           if (len == 2) {
               TreeNode* newNode = new TreeNode(nums[0]);
               node->left = newNode;
           }
           if (len > 2) {
               vector<int> leftNum(nums.begin(), nums.begin()+mid);
               vector<int> rightNum(nums.begin()+mid+1, nums.end());
               node->left = sortedArrayToBST(leftNum);
               node->right = sortedArrayToBST(rightNum);
           }
           return node; 
        }
    };
    
  • 相关阅读:
    本地发送博客
    0.查看Android framework源码
    flutter_5_深入_2_深入layout、paint流程
    flutter_5_深入_1_深入widget树和构建流程
    flutter_5_深入_0_每帧的处理流程简介
    蓝牙基础
    Android低功耗蓝牙开发
    flutter2_widget_3布局类组件1
    flutter2_widget_1简介
    Android gradle Plugin
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13166796.html
Copyright © 2011-2022 走看看