标签:题目 lan lis 复杂 说明 EDA node 平衡二叉搜索树 typedef
题目描述
给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)
示例1
输入
复制
{-1,0,1,2}
返回值
复制
{1,0,2,-1}
说明:本题目包含复杂数据结构TreeNode、ListNode,点此查看相关信息
typedef TreeNode Node;
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @return TreeNode类
*/
TreeNode* sortedListToBST(ListNode* head) {
// write code here
return build(head,NULL);
}
Node* build(ListNode* head,ListNode* tail) {
if(head==NULL|| head==tail) return NULL;
ListNode* first= head,*last=head;
while(first!=tail && first->next!=tail) first = first->next->next,last = last->next;
Node *root = new Node(last->val);
root->left = build(head,last);
root ->right = build(last->next,tail);
return root;
}
};
题目描述
给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST).
示例1
输入
复制
[-1,0,1,2]
返回值
复制
{1,0,2,-1}
说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
typedef TreeNode Node;
class Solution {
public:
/**
*
* @param num int整型vector
* @return TreeNode类
*/
TreeNode* sortedArrayToBST(vector<int>& num) {
if(num.size()<=0) return NULL;
return build(num,0 ,num.size()-1);
}
Node* build(vector<int>& a,int l,int r) {
if(l>r) return nullptr;
// if(l==r) return new Node(a[l]);
int mid = l+r+1>>1;
Node * root = new Node(a[mid]);
root ->left = build(a,l,mid-1);
root ->right = build(a,mid+1,r);
return root;
}
};
标签:题目 lan lis 复杂 说明 EDA node 平衡二叉搜索树 typedef
原文地址:https://www.cnblogs.com/lyr-2000/p/14326298.html