【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
来源:互联网 发布:godaddy新加坡注册域名 编辑:程序博客网 时间:2024/06/05 19:05
【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】
2 1
- 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
- LeetCode | 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
- [Leetcode] Convert Sorted List to Binary Search Tree (Java)
- [LeetCode][Java] Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree 将有序链表转化为平衡二叉排序树
- Leetcode Convert Sorted List to Binary Search Tree 把有序链表转换成二叉搜索树
- LeetCode(109)Convert Sorted List to Binary Search Tree
- LeetCode: Convert Sorted List to Binary Search Tree [109]
- LeetCode 109 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
- [LeetCode 109]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
- Convert Sorted List to Binary Search Tree - LeetCode 109
- leetcode[109]:Convert Sorted List to Binary Search Tree
- 【Leetcode】Edit Distance #72
- FSMC STM32 + FPGA
- 开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)
- 【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】
- 【LeetCode-面试算法经典-Java实现】【108-Convert Sorted Array to Binary Search Tree(排序数组转变为平衡二叉树)】
- 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
- hdoj1176免费馅饼【dp】
- 网桥和网桥相连的网络
- 信号
- POJ 2411 Mondriaan's Dream
- 3.1 变量和常量的数据类型;3.1.1 值类型
- hdoj1421搬寝室【dp】
- 建造者模式之构建器
- GDB 下 watch的使用http://www.cnblogs.com/lonelycatcher/archive/2011/10/09/2204865.html