题目:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example:‘Given the sorted array: [-10,-3,0,5,9],One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST: 0 / \ -3 9 / / -10 5
解释
给定一个排好序的数组,把它转换成一个平衡的二叉排序树,平衡树的意思是,每一个结点的两个子树的高度差永远不超过1。
直观的想法是取中间的结点作为根节点,左边的元素构成左子树,右边的元素构成右子树。
python代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def sortedArrayToBST(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
def dfs(start,end):
if start>end:
return None
middle=start+(end-start)/2
root=TreeNode(nums[middle])
root.left=dfs(start,middle-1)
root.right=dfs(middle+1,end)
return root
if not nums:
return None
return dfs(0,len(nums)-1)
c++代码:
/**
* 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 n=nums.size();
if (n!=0)
return dfs(0,n-1,nums);
return NULL;
}
TreeNode* dfs(int start,int end,vector<int>& nums)
{
if (start>end)
return NULL;
int middle=start+(end-start)/2;
TreeNode* root=new TreeNode(nums[middle]);
root->left=dfs(start,middle-1,nums);
root->right=dfs(middle+1,end,nums);
return root;
}
};
总结:
由于要求的是平衡的二叉排序树,且已经是排序后的数组了,所以直接把中间的元素当做根结点即可。