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

 更新时间:2017年04月25日 10:34:10   投稿:lqh  
这篇文章主要介绍了LintCode-排序列表转换为二分查找树分析及实例的相关资料,需要的朋友可以参考下

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

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

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

代码:

/** 
 * 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; 
    
  } 
 } 
}; 

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

您可能感兴趣的文章:

相关文章

  • C++中的函数修饰符深入讲解

    C++中的函数修饰符深入讲解

    这篇文章主要给大家介绍了关于C++中函数修饰符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • C++使用extern实现源文件变量与类成员函数的巧妙共享

    C++使用extern实现源文件变量与类成员函数的巧妙共享

    C++中使用extern关键字可实现在源文件之间共享变量与类成员函数,通过声明变量或类在头文件中,再在一个源文件中定义,其他源文件通过extern引用,促使模块化、可维护的代码组织,这篇文章主要介绍了C++用extern实现源文件变量与类成员函数的巧妙共享,需要的朋友可以参考下
    2024-03-03
  • 数据结构C语言链表的实现介绍

    数据结构C语言链表的实现介绍

    大家好,本篇文章主要讲的是数据结构C语言链表的实现介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2021-12-12
  • C++中的String的常用函数用法

    C++中的String的常用函数用法

    这篇文章主要介绍了C语言中String的常用函数用法,对学习String的小伙伴有一定的参考价值,感兴趣的小伙伴可以借鉴一下
    2023-03-03
  • C++利用PCL点云库操作txt文件详解

    C++利用PCL点云库操作txt文件详解

    这篇文章主要为大家详细介绍了C++如何利用PCL点云库操作txt文件,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2024-01-01
  • 详解Qt6 QML Settings location 不创建指定路径文件

    详解Qt6 QML Settings location 不创建指定路径文件

    到Qt6以后, 弃用了fileName属性,改用location属性,但有个坑,本文就来介绍一下Qt6 QML Settings location不创建指定路径文件,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • 详解C++异常处理机制示例介绍

    详解C++异常处理机制示例介绍

    任何东西都可以认为是异常,错误只是异常的一种。本文将带大家了解C++中异常是什么,是如何捕获和处理的等相关知识。文中示例代码简洁易懂,感兴趣的小伙伴可以了解一下
    2022-08-08
  • 详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数

    详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数

    这篇文章主要介绍了详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数的相关资料,这里提供实例帮助大家理解掌握这部分内容,需要的朋友可以参考下
    2017-08-08
  • C++ ffmpeg硬件解码的实现方法

    C++ ffmpeg硬件解码的实现方法

    这篇文章主要介绍了C++ ffmpeg硬件解码的实现,对FFmpeg多媒体解决方案中的视频编解码流程进行研究。为嵌入式多媒体开发提供参考,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 深入浅析STL vector用法

    深入浅析STL vector用法

    这篇文章给大家介绍 stl vector用法,主要知识点在如何恰当的使用它们的成员函数,涉及到条件函数和函数指针在迭代算法中的使用,对stl vector用法感兴趣的朋友可以参考下本文
    2015-10-10

最新评论