108. Convert Sorted Array to Binary Search Tree 109. Convert Sorted List to Binary Search Tree -- 将有序数组或有序链表转成平衡二叉排序树

时间:2023-03-09 01:55:08
108. Convert Sorted Array to Binary Search Tree 109. Convert Sorted List to Binary Search Tree -- 将有序数组或有序链表转成平衡二叉排序树

108. Convert Sorted Array to Binary Search Tree

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* buildTree(vector<int> nums, int left, int right)
{
if(left > right)
return NULL;
TreeNode *node;
if(left == right)
{
node = new TreeNode(nums[left]);
return node;
}
int mid = (left+right)/;
node = new TreeNode(nums[mid]);
node->left = buildTree(nums, left, mid-);
node->right = buildTree(nums, mid+, right);
return node;
} TreeNode* sortedArrayToBST(vector<int>& nums) {
int n = nums.size();
if(!n)
return NULL;
TreeNode *root = buildTree(nums, , n-);
return root;
}
};

109. Convert Sorted List to Binary Search Tree

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/**
* 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* buildTree(ListNode* &head, int left, int right)
{
if(left > right)
return NULL;
int mid = (left + right) / ;
TreeNode *leftNode = buildTree(head, left, mid-);
TreeNode *node = new TreeNode(head->val);
node->left = leftNode;
head = head->next;
TreeNode *rightNode = buildTree(head, mid+, right);
node->right = rightNode;
return node;
} TreeNode* sortedListToBST(ListNode* head) {
int len = ;
for(ListNode *p = head; p; p = p->next)
len++;
if(!len)
return NULL;
TreeNode *root = buildTree(head, , len-);
return root;
}
};

先建左子树,然后head后移,再建右子树。