首页 > 编程 > C > 正文

LintCode-排序列表转换为二分查找树分析及实例

2020-01-26 14:10:47
字体:
来源:转载
供稿:网友

给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树

您在真实的面试中是否遇到过这个题? 

分析:就是一个简单的递归,只是需要有些链表的操作而已

代码:

/**  * Definition of ListNode  * class ListNode {  * public:  *  int val;  *  ListNode *next;  *  ListNode(int val) {  *   this->val = val;  *   this->next = NULL;  *  }  * }  * Definition of TreeNode:  * class TreeNode {  * public:  *  int val;  *  TreeNode *left, *right;  *  TreeNode(int val) {  *   this->val = val;  *   this->left = this->right = NULL;  *  }  * }  */ class Solution { public:  /**   * @param head: The first node of linked list.   * @return: a tree node   */  TreeNode *sortedListToBST(ListNode *head) {   // write your code here   if(head==nullptr)    return nullptr;   int len = 0;   ListNode*temp = head;   while(temp){len++;temp = temp->next;};   if(len==1)   {    return new TreeNode(head->val);   }   else if(len==2)   {    TreeNode*root = new TreeNode(head->val);    root->right = new TreeNode(head->next->val);    return root;   }   else   {    len/=2;    temp = head;    int cnt = 0;    while(cnt<len)    {     temp = temp->next;     cnt++;    }    ListNode*pre = head;    while(pre->next!=temp)     pre = pre->next;    pre->next = nullptr;    TreeNode*root = new TreeNode(temp->val);    root->left = sortedListToBST(head);    root->right = sortedListToBST(temp->next);    return root;       }  } }; 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选