高度最小的BST&&108. Convert Sorted Array to Binary Search Tree

来源:互联网 发布:被广电禁播的网络剧 编辑:程序博客网 时间:2024/06/08 00:28

题目描述

对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。
给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。

解答

  要创建一棵高度最小的树,就必须让左右子树的结点数量越接近越好。也就是说,我们要让数组中间的值成为根节点,这样数组左边一半成为左子树,右边一半成为右子树。
  然后我们以类似的方式构造整棵树。数组每一区段的中间元素成为子树的根节点,左半部分成为左子树,右半部份成为右子树。
  该算法简述如下
1. 将数组中间位置的元素插入树中
2. 将数组左半边元素插入左子树
3. 将数组右半边元素插入右子树
4. 递归处理

/** * 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 sortedArrayToBST(nums,0,nums.size()-1);    }    TreeNode* sortedArrayToBST(vector<int>& nums,int l,int u)    {        if(l > u)            return NULL;        int mid = l+ (u-l)/2;        TreeNode *root = new TreeNode(nums[mid]);        root->left = sortedArrayToBST(nums,l,mid-1);        root->right =sortedArrayToBST(nums,mid+1,u);        return root;    }};
0 0
原创粉丝点击