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; 
    }
};
posted @ 2020-06-19 22:42  樱花小猪  阅读(124)  评论(0编辑  收藏  举报