原题地址:http://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/

题意:将一条排序好的链表转换为二叉查找树,二叉查找树需要平衡。

解题思路:两个思路:一,可以使用快慢指针来找到中间的那个节点,然后将这个节点作为树根,并分别递归这个节点左右两边的链表产生左右子树,这样的好处是不需要使用额外的空间,坏处是代码不够整洁。二,将排序好的链表的每个节点的值存入一个数组中,这样就和http://www.cnblogs.com/zuoyuan/p/3722103.html这道题一样了,代码也比较整洁。

代码:

# Definition for a  binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None class Solution:
# @param head, a list node
# @return a tree node
def sortedArrayToBST(self, array):
length = len(array)
if length==0: return None
if length==1: return TreeNode(array[0])
root = TreeNode(array[length/2])
root.left = self.sortedArrayToBST(array[:length/2])
root.right = self.sortedArrayToBST(array[length/2+1:])
return root def sortedListToBST(self, head):
array = []
p = head
while p:
array.append(p.val)
p = p.next
return self.sortedArrayToBST(array)

最新文章

  1. Servlet3.0的可插拔功能
  2. Appium中部分api的使用方法
  3. EntityFramework优缺点
  4. PostgreSQL Reading Ad Writing Files、Execution System Instructions Vul
  5. aop实现日志(转)
  6. (六)WebRTC手记之WebRtcVideoEngine2模块
  7. Java程序发展之路
  8. mysql 复习与学习(二)数据库及表结构的创建删除
  9. tomcat 会话超时设置
  10. 业务零影响!如何在Online环境中巧用MySQL传统复制技术【转】
  11. 排序算法总结(C++版)
  12. 一起写框架-Ioc内核容器的实现-基础API的定义(三)
  13. java.sql.SQLException: Access denied for user 'sa'@'localhost' (using password: NO)
  14. python中对文件和文件夹的操作
  15. Laravel 执行流程(一)之自动加载
  16. 使用Phabricator进行代码审查
  17. Brainfuck解析器(Python)
  18. python网页爬虫开发之一
  19. vector_01
  20. 关于Behold the Kickmen (球员登场)

热门文章

  1. js javascript 原型链详解
  2. poj2676(数独)
  3. 深入剖析cpp对象模型
  4. 关于PyCharm database查看db.sqlites文件无内容的一种可能解决方法
  5. android studio 汉化包 美化包
  6. android 视频
  7. CF696B Puzzles 期望
  8. 洛谷.4383.[八省联考2018]林克卡特树lct(树形DP 带权二分)
  9. hdu 2197 推公式
  10. java集合系列之三(ArrayList)