二叉树的各种遍历方式都是可以建立二叉树的,例如中序遍历,就是在第一步建立左子树,中间第二步建立新的节点,第三步构建右子树
此题利用二叉搜索树的中序遍历是递增序列的特点,而链表正好就是递增序列,从左子树开始递归利用链表的数据
控制平衡是用的递归层数,用left和right来控制
/* 各序遍历也可以建立树 利用二叉搜索树的特点,用中序遍历建立二叉树 */ //要递归listnode,所以要用全局变量 ListNode node; public TreeNode sortedListToBST(ListNode head) { node = head; //首先计算listnode的长度,用来取中间节点 int size = 0; while (head!=null) { head = head.next; size++; } return builder(0,size-1); } public TreeNode builder(int left,int right) { if (left>right) return null; int mid = (right+left)/2; //建造左子树 TreeNode lt = builder(left,mid-1); //当前根节点 TreeNode root = new TreeNode(node.val); root.left = lt; //节点后移 node = node.next; //构造右子树 TreeNode rt = builder(mid+1,right); root.right = rt; return root; }