LeetCode- 108/109. Convert Sorted Array/List to Binary Search Tree (JAVA)
来源:互联网 发布:天津中年同志软件 编辑:程序博客网 时间:2024/05/23 18:31
108. Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
每次找到排序数组的中点,中点左边的子排序数组构成左子树,中点右边的子排序数组构成右子树。就这样递归进行.(注意边界)
public TreeNode sortedArrayToBST(int[] nums) {return builder(nums, 0, nums.length - 1);}private TreeNode builder(int[] nums, int left, int right) {if (left > right)return null;// 上层跟结点连接下层根节点int mid = left + (right - left) / 2;TreeNode root = new TreeNode(nums[mid]);root.left = builder(nums, left, mid - 1);root.right = builder(nums, mid + 1, right);return root;}
109. 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.
与上体类似,但要求链表的中点,用快慢指针求链表的中点。注意一下求中点即可。空间和时间都为O(n):
public TreeNode sortedListToBST(ListNode head) {if (head == null)return null;// 传入前闭后开区间return builder(head, null);}// start和end是前闭后开private TreeNode builder(ListNode start, ListNode end) {if (start == end)return null;ListNode mid = getMid(start, end);TreeNode root = new TreeNode(mid.val);root.left = builder(start, mid);root.right = builder(mid.next, end);return root;}// 获取中间结点private ListNode getMid(ListNode start, ListNode end) {ListNode slow = start;ListNode fast = start;// 注意这个不等于end用法,while (fast != end && fast.next != end) {slow = slow.next;fast = fast.next.next;}return slow;}
discuss的o(n)解法,采用 中序遍历,递归结点
一种自底向上的方法,算法复杂度为O(N)。先递归构建左子树,在构建左子树的同时不断移动链表的头指针,链表的头指针永远是对应当前子树位置的。一直到左叶子节点,左叶子节点对应的就是链表的第一个元素,生成左叶子节点之后移动链表当前指针。
ListNode currentHead = null;TreeNode buildTree(int start, int end) {if (start > end) {return null;}int mid = start + (end - start) / 2;TreeNode left = buildTree(start, mid - 1);TreeNode root = new TreeNode(currentHead.val);root.left = left;currentHead = currentHead.next;root.right = buildTree(mid + 1, end);return root;}public TreeNode sortedListToBST(ListNode head) {if (head == null) {return null;}currentHead = head;int len = 0;while (head != null) {len++;head = head.next;}return buildTree(0, len - 1);}
0 0
- LeetCode- 108/109. Convert Sorted Array/List to Binary Search Tree (JAVA)
- [leetcode-108]Convert Sorted Array to Binary Search Tree(java)
- 【LeetCode】Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
- [Leetcode]Convert Sorted Array & List to Binary Search Tree
- 【leetcode】Convert Sorted Array/List to Binary Search Tree
- LeetCode:Convert Sorted Array(List) to Binary Search Tree
- LeetCode 108, 109. Convert Sorted Array/List to Binary Search Tree
- [Leetcode] Convert Sorted Array to Binary Search Tree (Java)
- 【Leetcode】Convert Sorted Array to Binary Search Tree in JAVA
- [LeetCode][Java] Convert Sorted Array to Binary Search Tree
- leetCode 108. Convert Sorted Array to Binary Search Tree JAVA
- leetcode-java-108. Convert Sorted Array to Binary Search Tree
- 【leetcode】108. Convert Sorted Array to Binary Search Tree【java】
- LeetCode-108. Convert Sorted Array to Binary Search Tree(Java)
- Leetcode 108 Convert Sorted Array to Binary Search Tree
- Leetcode 108 Convert Sorted Array to Binary Search Tree
- LeetCode 108: Convert Sorted Array to Binary Search Tree
- LeetCode(108)Convert Sorted Array to Binary Search Tree
- eclipse git 提交时提示 “There are no staged files”
- leetcode 230 Kth Smallest Element in a BST C++
- Python编程:从入门到实践读书笔记-7 用户输入和while循环
- 扫雷小游戏
- 【ZOJ3953 The 17th Zhejiang University Programming Contest F】【贪心 or 费用流】Intervals 删最少线段使得每点最多2次覆盖
- LeetCode- 108/109. Convert Sorted Array/List to Binary Search Tree (JAVA)
- Path&PathMeasure完全解析
- 初尝Java异步编程
- 简述值类型和引用类型的区别
- table表格的一个css代码
- Git入门
- Spring框架学习(11):Spring泛型依赖注入
- C++之智能指针总结
- JPA学习