Leetcode Convert Sorted List to Binary Search Tree 把有序链表转换成二叉搜索树
来源:互联网 发布:vscode reactjs 插件 编辑:程序博客网 时间:2024/05/17 02:15
题目:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
分析:
举一个例子, 假如链表为 1--> 2 --> 3 --> 4 --> 5 --> 6 --> 7。 根据二叉搜索树的性质 root.val > left.val && root.val < right.val, 转换成二叉搜索树应该是
4
/ \
2 6
/ \ / \
1 3 5 7
从这个例子可以看出,链表的中间节点是树的根节点,中间节点把链表分成左右两部分,左右两个链表的中点又分别是根节点左右子树的根节点。因此,最容易想到用递归的方法。
1. 递归的结束条件是当节点为空或节点的next为空。节点为空则返回空,节点的next为空则返回该节点对应的树节点。
2. 找链表的中点作为根节点,对中点划分出来的左右两个链表递归调用函数,返回的节点分别为根节点的左右孩子。
Java代码实现:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } *//** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode sortedListToBST(ListNode head) { if(head==null) return null; if(head.next==null) return new TreeNode(head.val); ListNode slow = head; ListNode fast = head; ListNode pre = head; while(fast!=null && fast.next!=null) { fast = fast.next.next; pre = slow; slow = slow.next; } TreeNode root = new TreeNode(slow.val); pre.next = null; TreeNode left = sortedListToBST(head); TreeNode right = sortedListToBST(slow.next); root.left = left; root.right = right; return root; }}
0 0
- 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 List to Binary Search Tree )
- LeetCode | Convert Sorted Array to Binary Search Tree(有序数组转换成平衡二叉树搜索树)
- Convert Sorted List to Binary Search Tree 把有序链表转为BST@LeetCode
- LeetCode OJ 之 Convert Sorted Array to Binary Search Tree(把有序数组转化为二叉搜索树)
- 有序数组转换为平衡二叉搜索树(Convert Sorted Array to Binary Search Tree)
- 108. Convert Sorted Array to Binary Search Tree 有序数组转换为平衡二叉搜索树
- 【LeetCode笔记】Convert Sorted Array to Binary Search Tree 通过有序数列建立二叉搜索树
- LeetCode Convert Sorted List to Binary Search Tree(有序单链表转为平衡二叉树)
- Convert Sorted Array to Binary Search Tree 把一个有序数组转换成BST @LeetCode
- leetcode 109. Convert Sorted List to Binary Search Tree 链表构造平衡二叉搜索树 + DFS
- LeetCode 109. Convert Sorted List to Binary Search Tree(链表到二叉搜索树)
- leetcode---Convert Sorted List to Binary Search Tree---二叉搜索树
- LeetCode 108. Convert Sorted Array to Binary Search Tree(数组转换为二叉搜索树)
- [leetcode]Convert Sorted Array to Binary Search Tree (有序数组转化为二叉搜索树 C语言)
- Android手工测试代码覆盖率增强版
- 谷歌推全新Android开发语言——Sky
- 求一个数的阶乘后面有多少个0
- 如何学习C++
- java学习笔记4
- Leetcode Convert Sorted List to Binary Search Tree 把有序链表转换成二叉搜索树
- 汇编基础代码_2
- 顶部title如何替换掉
- 数据结构之栈的基本功能实现
- 【Spring】Spring在JavaWeb工程中整合log4j
- 过滤器 监听器 拦截器 区别
- 浏览器视频卡死
- [Linux内存]slub分配器学习笔记(一)--基本概念
- Java 学习第7天(2)Java当中的异常