将一个有序的链表转换成对应的排序二叉树,引申一下就是用一堆有序的数字来创建一个排序二叉树。比较笨的办法就是每次插入都从root开始进行遍历。这里考虑到有序数列是通过二叉树经过中序遍历得到的。因此中间的数字为根节点,左右两边为左右子树,再进行递归就能根据有序数列建立排序二叉树。
ListNode p;//用来更新向后的数据,先建立左子树正是从左到右一步步的移动
public TreeNode sortedListToBST(ListNode head){
if(head==null){
return null;
}
p=head;
int len=getLen(head);
return createBST(0,len-1);
}
public int getLen(ListNode head){
int counter=0;
while(head!=null){
counter++:
head=head.next;
}
return counter;
}
public TreeNode createBST(int left,int right){
if(left>right){
return null;
}
int mid=(left+right)/2;
TreeNode left=createBST(0,mid-1);
TreeNode root=new TreeNode(h.val);
h=h.next;
TreeNode right=createBST(mid+1,right);
root.left=left;
root.right=right;
return root;
}