Convert Sorted List to Binary Search Tree 把有序链表转为BST@LeetCode
来源:互联网 发布:软件测试工程师基础 编辑:程序博客网 时间:2024/05/23 01:58
万能的递归法,注意到有一点比较巧的是,由于单链表都是单向的。所以这里我的查找区间设置为左闭右开!这样就避免了去找mid节点的前一个节点
package Level4;import Utility.ListNode;import Utility.TreeNode;/** * Convert Sorted List to Binary Search Tree * * Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. * */public class S109 {public static void main(String[] args) {ListNode head = new ListNode(1);ListNode n2 = new ListNode(3);head.next = n2;TreeNode root = sortedListToBST(head);}public static TreeNode sortedListToBST(ListNode head) { return rec(head, null); }// 在区间[start, end)里递归,后面的end是包括在内的,这样可以避免要多用一个指针来记录mid前的节点public static TreeNode rec(ListNode start, ListNode end){if(start == end){return null;}// 一次遍历找到中点的方法:快慢指针ListNode mid = start;// 该指针最终会指向中点ListNode probe = start;// 探针最终会到达endwhile(probe!=end && probe.next!=end){// 探针完成搜索,注意停止条件是和end比较而不是和null比!mid = mid.next;probe = probe.next.next;}TreeNode root = new TreeNode(mid.val);root.left = rec(start, mid);root.right = rec(mid.next, end);return root;}}
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; next = null; } * } *//** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode sortedListToBST(ListNode head) { return rec(head, null); } public TreeNode rec(ListNode start, ListNode end) { if(start == end) { return null; } ListNode p = start, q = start; while(q != end && q.next != end) { p = p.next; q = q.next.next; } TreeNode root = new TreeNode(p.val); root.left = rec(start, p); root.right = rec(p.next, end); return root; } }
- Convert Sorted List to Binary Search Tree 把有序链表转为BST@LeetCode
- Convert Sorted Array to Binary Search Tree 把一个有序数组转换成BST @LeetCode
- Leetcode 109. Convert Sorted List to Binary Search Tree 转化有序链表到BST 解题报告
- 【Leetcode】Convert Sorted List to Binary Search Tree (BST)
- LeetCode Convert Sorted List to Binary Search Tree(有序单链表转为平衡二叉树)
- LeetCode OJ 之 Convert Sorted List to Binary Search Tree(把有序链表转化为二叉搜索树)
- Leetcode Convert Sorted List to Binary Search Tree 把有序链表转换成二叉搜索树
- [LeetCode]Convert Sorted Array to Binary Search Tree 将有序数组转换成BST
- Leetcode Convert Sorted Array to Binary Search Tree 有序数组转换成二叉搜索树BST
- Leetcode 108. Convert Sorted Array to Binary Search Tree 有序数组转化BST 解题报告
- Convert Binary Search Tree (BST) to Sorted Doubly-Linked List
- Convert Binary Search Tree (BST) to Sorted Doubly-Linked List
- 有序递增链表转化为平衡的二叉搜索树(LeetCode: Convert Sorted List to Binary Search Tree )
- [leetcode]Convert Sorted Array to Balanced Binary Search Tree (BST)
- 【Leetcode】Convert Sorted Array to Binary Search Tree (BST)
- Convert Sorted List to Binary Search Tree 将有序链表转化为平衡二叉排序树
- 【LeetCode】Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
- [C++]LeetCode: 106 Convert Sorted List to Binary Search Tree (有序链表转AVL树)
- 每天一个linux命令(30): chown命令
- Android实现带Tab页引导的ViewPager
- android访问NFC的SE
- restlet中resource类处理请求的两种写法说明
- 使用PS滤镜打造漂亮彩色光环
- Convert Sorted List to Binary Search Tree 把有序链表转为BST@LeetCode
- 神奇的HomeBrew
- 每天一个linux命令(31): /etc/group文件详解
- android通过URL路径下载安装文件
- libpng库的使用讲解
- android4.2 动态显示/隐藏导航栏
- 函数inet_addr和inet_ntoa-linux
- c实现学生成绩管理系统 MIS
- 每天一个linux命令(32):gzip命令