【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
2017-07-30 17:51
886 查看
【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
【LeetCode-面试算法经典-Java实现】【全部题目文件夹索引】
原题
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.题目大意
给定一个升序的单链表。将它转换成一颗高度平衡的二叉树解题思路
解法一:将单链表中的值存入一个数组中,通过数组来构建二叉树。算法时间复杂度是:O(n),空间复杂度是:O(n)解法二:採用递归的方式。
(一)找中间结点,构建根结点。
(二)中间结点左半部分构建左子树,
(三)中间结点的右部分构建右子树
题採用另外一种解法
代码实现
树结点类public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
算法实现类
public class Solution { public TreeNode sortedListToBST(ListNode head) { // 假设链表为空就直接返回null if (head == null) { return null; } // 链表仅仅有一个结点 if (head.next == null) { return new TreeNode(head.val); } // 高速移动结点,每次移动两个位置 ListNode fast = head.next.next; // 记录中间结点 ListNode mid = head; // 找中间结点 while (fast != null && fast.next != null) { mid = mid.next; fast = fast.next.next; } // 以中间结点的下一个结点作为根结点 TreeNode root = new TreeNode(mid.next.val); // 构建右子树 root.right = sortedListToBST(mid.next.next); // 记录链表要断开的点 ListNode midNext = mid.next; // 断开单链表(会破坏原来单链表的结构) mid.next = null; // 构建左子树 root.left = sortedListToBST(head); // 又一次将链表接好 mid.next = midNext; // 返回结果 return root; } }
评測结果
点击图片,鼠标不释放。拖动一段位置。释放后在新的窗体中查看完整图片。特别说明
欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47393027】
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
- 【LeetCode-面试算法经典-Java实现】【108-Convert Sorted Array to Binary Search Tree(排序数组转变为平衡二叉树)】
- [LeetCode 109] - 将已排序链表转换为二叉搜索树 (Convert Sorted List to Binary Search Tree)
- LeetCode109_Convert Sorted List to Binary Search t题目tiTree(将链表转成二叉排序树) Java题解
- 【leetcode】【单链表】【109】Convert Sorted List to Binary Search Tree
- 【LeetCode-面试算法经典-Java实现】【114-Flatten Binary Tree to Linked List(二叉树转单链表)】
- LeetCode OJ:Convert Sorted List to Binary Search Tree(将排序好的链表转换成二叉搜索树)
- 【LeetCode-面试算法经典-Java实现】【114-Flatten Binary Tree to Linked List(二叉树转单链表)】
- Leetcode 109 Convert Sorted List to Binary Search Tree 有序单链表构造平衡二插查找树
- LeetCode | Convert Sorted List to Binary Search Tree(链表转换成二叉搜索树)
- leetcode_c++:链表:Convert Sorted List to Binary Search Tree(109)
- 【leetcode】【单链表】【109】Convert Sorted List to Binary Search Tree
- 【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】
- Leetcode Convert Sorted List to Binary Search Tree 把有序链表转换成二叉搜索树
- Java for LeetCode 109 Convert Sorted List to Binary Search Tree
- 【LeetCode-面试算法经典-Java实现】【083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)】
- Convert Sorted List to Binary Search Tree leetcode java
- 有序递增链表转化为平衡的二叉搜索树(LeetCode: Convert Sorted List to Binary Search Tree )
- [LeetCode#109]Convert Sorted List to Binary Search Tree
- leetcode || 109、Convert Sorted List to Binary Search Tree