1。题目描述:给定一个元素按升序排列的单向链表,将其转化为一棵高度平衡的二叉搜索树。本题中,高度平衡的二叉树是指一棵二叉树的每个节点的左右子树的高度差的绝对值不超过1。2.思路1)将链表转化为数组;2)找到数组的中间节点;3)Traverse从左到右逐步遍历;三、基础知识1)通过移位求中间值N>>>1表示将N的二进制值右移一位,将二进制右移一位即可得到中间值少量。例如10>>>110的二进制码右移一位后为1010,即0101或52),它是一种数据结构,支持多种动态集合操作,如Search,Insert,Delete,Minimum和Maximum等。二叉搜索树是空树或非空二叉树,具有以下内容性质:如果左子树不为空,则左子树上所有节点的key值都小于根节点word值的key。如果右子树不为空,则右子树上所有节点的键值都大于根节点的键值。左右子树本身也是一棵二叉查找树(binarysorttree)。4.实现代码如下:/***单链表定义。*functionListNode(val,next){*this.val=(val===undefined?0:val)*this.next=(next===undefined?null:next)*}*//***定义对于二叉树节点。*functionTreeNode(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}*/varsortedListToBST=function(head){//根据来自index的子数组构造子树starttoendletarr=[]while(head){//链接列表到有序数组arr.push(head.val)head=head.next}constbuildBinarySearchTree=(start,end)=>{if(start>end){//左边比右边小returnnull}constmid=(start+end)>>>1//找到中间节点constroot=newTreeNode(arr[mid])//构建中间根节点root.left=buildBinarySearchTree(start,mid-1)//递归左子树root.right=buildBinarySearchTree(mid+1,end)//递归右子树returnroot;}返回buildBinarySearchTree(0,arr.length-1)};参考链接https://leetcode-cn.com/probl...
