算法第九周解题报告

来源:互联网 发布:linux init3 编辑:程序博客网 时间:2024/06/06 12:59

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* sortedListToBST(ListNode* head) {        vector<int> nums(0);        ListNode *p = head;        while(p != NULL){            nums.push_back(p -> val);            p = p -> next;        }        TreeNode* root = NULL;        BSTreeCons(nums, 0, nums.size() - 1, root);        return root;    }        void BSTreeCons(vector<int>& nums, int begin, int end, TreeNode*& root){        if(begin > end) return;        int mid = (begin + end) / 2;        root = new TreeNode(nums[mid]);        BSTreeCons(nums, begin, mid - 1, root -> left);        BSTreeCons(nums, mid + 1, end, root -> right);            }};

结果:


0 0