码迷,mamicode.com
首页 > 其他好文 > 详细

Convert Sorted List to Binary Search Tree

时间:2014-06-06 18:11:06      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

首先想到的是先将单链表转化为数组,就可以取中位数为根节点再递归左右子做,时间复杂度O(n),空间复杂度O(n)。

在网上搜了个时间复杂度为O(n),空间复杂度为O(1)的做法,思路如下:

由于二叉排序树的中序遍历即有序,也就是与本题中的单链表从头到尾遍历相同,所以可以按照类似中序遍历的做法,首先,创建当前节点的左子,然后创建当前节点,将该节点的left指针指向之前创建好的左子,然后创建右子,以这样的顺序,每次新创建的节点都对应单链表的顺序遍历中当前位置的节点,因此,用一个全局遍历表示当链表,在递归过程中不断修改当前单链表的指针,使每次创建的节点与单链表头节点对应。代码如下:

bubuko.com,布布扣
 1 public ListNode head;
 2     public TreeNode sortedListToBST(ListNode head) {
 3         this.head = head;
 4         ListNode p = head;
 5         int len = 0;
 6         while (p != null) {
 7             p = p.next;
 8             len++;
 9         }
10         return buildTree(0, len - 1);
11     }
12 
13     private TreeNode buildTree(int start, int end) {
14         // TODO Auto-generated method stub
15         if (start > end) {
16             return null;
17         }
18         int mid = start + (end - start) / 2;
19         TreeNode left = buildTree(start, mid - 1);
20         TreeNode root = new TreeNode(head.val);
21         root.left = left;
22         head = head.next;
23         root.right = buildTree(mid + 1, end);
24         return root;
25     }
bubuko.com,布布扣

bubuko.com,布布扣

Convert Sorted List to Binary Search Tree,布布扣,bubuko.com

Convert Sorted List to Binary Search Tree

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/apoptoxin/p/3766336.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!