题目:
解答:
将上一篇中的 将有序数组转化为平衡二叉树改一下,先把链表存成数组。
代码:
class Solution {
public:
TreeNode *sortedListToBST(ListNode *head) {
if (head == NULL)
return NULL;
vector<int> num;
while (head)
{
num.push_back(head->val);
head = head->next;
}
TreeNode * res = sortedArrayToBST(num);
return res;
}
private:
TreeNode *sortedArrayToBST(vector<int> &num) {
if (num.size() == 0)
return NULL;
TreeNode *root = new TreeNode(0); //新建一个节点作为根节点
build(root, 0, num.size() - 1, num);
return root;
}
void build(TreeNode *root, int start, int end, vector<int> &num)
{
int mid = start + (end - start) / 2; //将中间值作为根节点的值
root->val = num[mid];
if (start <= mid - 1) //如果左边数组不为空
{
TreeNode *node = new TreeNode(0); //新建一个节点,为根节点的左子节点,同时作为左子树的根节点传入递归程序
root->left = node;
build(root->left, start, mid - 1, num);
}
if (mid + 1 <= end) //如果右边数组不为空
{
TreeNode *node = new TreeNode(0); //新建一个节点,为根节点的右子节点,同时作为右子树的根节点传入递归程序
root->right = node;
build(root->right, mid + 1, end, num);
}
}
};