Convert Sorted List to Binary Search Tree

来源:互联网 发布:手机数字键盘钢琴软件 编辑:程序博客网 时间:2024/06/16 22:46
二叉树


本题将listnode转化为BST


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.



#include<iostream>#include<vector>using namespace std;struct ListNode{int val;ListNode *next;ListNode(int x) :val(x), next(nullptr) {}};struct TreeNode{int val;TreeNode *l;TreeNode *r;TreeNode(int x) :val(x), l(nullptr), r(nullptr) {}};class Solution{ public:ListNode *init(vector<int> &vec) //链表的初始化{ListNode dumy(-1);ListNode *temp = &dumy;for (int i = 0; i < vec.size(); i++, temp = temp->next){temp->next = new ListNode(vec[i]);}return dumy.next;}TreeNode *SortlistToBST(ListNode *head){return sortlistToBST(head, listlen(head));}TreeNode *sortlistToBST(ListNode *head, int len){if (len == 0) return nullptr;if (len == 1) return new TreeNode(head->val);TreeNode *root = new TreeNode(nth_node(head, len/2+1)->val);root->l = sortlistToBST(head, len / 2);root->r = sortlistToBST(nth_node(head, len / 2 + 2), (len - 1) / 2);//(len-1)/2+len/2+1=lenreturn root;}ListNode *nth_node(ListNode* head, int len){while (--len){head = head->next;}return head;}int listlen(ListNode *head) //中序输出{int n = 0;while (head != nullptr){++n;head = head->next;}return n;}void midorder(TreeNode *root){if (root != nullptr){midorder(root->l);cout<< root->val<<",";midorder(root->r);}}};int main(){Solution s1;    vector<int> vec{ 1, 2, 3, 4, 5};ListNode *list;list = s1.init(vec);s1.midorder(s1.SortlistToBST(list));cout << endl;system("pause");return 0;}


0 0
原创粉丝点击