109. Convert Sorted List to Binary Search Tree

有点没有完全想明白。

能够理解的点有:

1. 给你一个sorted list,用这里面的树构建bst,说明这个list是该bst的inorder遍历。

2. 给你的list相当于一个queue,每次用掉一个node就往后移动一格,相当于queue.poll();

3. 和之前那题serialize的题有点像,我当时选择的方式是preorder,这里是Inorder。但是那个里面叶节点会用#标记,这里没有#, 只能用一个start, end来标记,如果start>end那么就说明已经到叶节点了,返回空,所以建树的顺序是 left = 递归()=> 创建root => root.left = left => root.right = 递归另一半

 

 1 private ListNode node;
 2     public TreeNode sortedListToBST(ListNode head) {
 3         if(head == null) {
 4             return null;
 5         }
 6         int size = 0;
 7         node = head;
 8         ListNode cur = head;
 9         while(cur != null) {
10             cur = cur.next;
11             size++;
12         }
13         return constructTree(0, size - 1);
14     }
15     
16     private TreeNode constructTree(int start, int end) {
17         if(start > end) {
18             return null;
19         }
20         int mid = start + (end - start) / 2;
21         TreeNode left = constructTree(start, mid - 1);
22         TreeNode root = new TreeNode(node.val);
23         root.left = left;
24         node = node.next;
25         root.right = constructTree(mid + 1, end);
26         return root;
27     }

我觉得时间复杂度是O(n),因为node只走了一遍。

可以把serialize和deserialize用inorder再做一遍

posted @ 2016-11-01 07:11  warmland  阅读(896)  评论(0编辑  收藏  举报