有序链表转换二叉搜索树。给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
1 |
|
1 |
|
思路一
递归解决,首先找到链表的中间结点,通过两个指针,一个快指针一次走两个结点,一个慢指针一次走一个节点,当快指针走到链表尾结点时,慢指针正好在链表中间结点,然后生成树节点。时间复杂度 \(O(n \log n)\)。
1 |
|
思路二
与思路一类似,此方法不会破坏链表结构。时间复杂度 \(O(n \log n)\)。
1 |
|
思路三
将链表转成数组,然后递归解决。时间复杂度 \(O(n)\)。
1 |
|
思路四
使用中序遍历。我们知道中序遍历最左边的元素就是链表的头指针指向的元素,同样的,中序遍历的下一个元素就是链表的第二个元素。代码如下:
1 |
|
时间复杂度 \(O(n)\)。