这道题跟将有序数组转换为二叉搜索树有点相似
题目描述
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1
示例1
给定的有序链表: [-10, -3, 0, 5, 9],
一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
分析
- 先把链表遍历出来,然后进行下面的操作
- 具体分析可以看
代码
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {ListNode} head
* @return {TreeNode}
*/
var sortedListToBST = function(head) {
let array = getSortedList(head);
let res = toBST(array);
return res;
};
var getSortedList = function(head) {
let result = [];
let p = head;
while(p != null) {
result.push(p.val);
p = p.next;
}
return result;
}
var toBST = function(array) {
let length = array.length;
if(length == 0) {
return null
}
let mid = Math.floor(length / 2);
let left = array.slice(0, mid);
let right = array.slice(mid + 1, length);
let root = new TreeNode(array[mid]);
root.left = toBST(left);
root.right = toBST(right);
return root;
}