一天一道LeetCode#108. Convert Sorted Array to Binary Search Tree

Posted ZeeCoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一天一道LeetCode#108. Convert Sorted Array to Binary Search Tree相关的知识,希望对你有一定的参考价值。

一天一道LeetCode

本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github
欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处

(一)题目

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

(二)解题

题目大意:给定一个排好序的数组,将它转变成一个平衡二叉搜索数
解题思路:平衡二叉搜索树的中序遍历为升序数组,而且根节点为数组的中心值。
于是,可以想到每次去数组中间的值作为根节点,左边为左子树,右边为右子树;再在左边部分中找中间位置为根节点,分为两半,依次递归下去,直到没有左/右子树或者只有一个值为止!

由以上的分析不难写出递归版本的代码:

/**
 * 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) {
        return dfsBSTree(nums,0,nums.size()-1);
    }
    TreeNode* dfsBSTree(vector<int>& nums, int start,int end)
    {
        if(start>end) return NULL;//节点为NULL
        int medium = (start+end)/2;//找到根节点
        TreeNode* root = new TreeNode(nums[medium]);
        if(start==end) return root;//只有一个节点的情况
        root->left = dfsBSTree(nums,start,medium-1);//找左子树
        root->right = dfsBSTree(nums,medium+1,end);//找右子树
        return root;
    }
};

以上是关于一天一道LeetCode#108. Convert Sorted Array to Binary Search Tree的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode OJ 108. Convert Sorted Array to Binary Search Tree DFS求解

leetcode 108 Convert Sorted Array to Binary Search Tree

LeetCode 108. Convert Sorted Array to Binary Search Tree

Leetcode 108. Convert Sorted Array to Binary Search Tree

LeetCode_108. Convert Sorted Array to Binary Search Tree

[LeetCode]题解(python):108-Convert Sorted Array to Binary Search Tree