[leetcode]109. Convert Sorted List to Binary Search Tree链表构建二叉搜索树

二叉树的各种遍历方式都是可以建立二叉树的,例如中序遍历,就是在第一步建立左子树,中间第二步建立新的节点,第三步构建右子树

此题利用二叉搜索树的中序遍历是递增序列的特点,而链表正好就是递增序列,从左子树开始递归利用链表的数据

控制平衡是用的递归层数,用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;
    }
原文地址:https://www.cnblogs.com/stAr-1/p/8340500.html