题解 | #将升序数组转化为平衡二叉搜索树#

将升序数组转化为平衡二叉搜索树

http://www.nowcoder.com/practice/7e5b00f94b254da599a9472fe5ab283d

二叉平衡搜索树的中序遍历是升序数组

对中序序列而言,其中间存在一个根节点,根节点左侧为左子树,根节点右侧为右子树。
又由二叉平衡树左右子树,其高度差小于等于1,所以可以从升序序列中部寻找这个结点。
当找到这个结点后,以其左侧和右侧数组,再次构造二叉平衡树。

    public TreeNode sortedArrayToBST (int[] num) {
        // write code here
        if(num == null || num.length == 0) {
            return null;
        }
        return conduct(num, 0, num.length -1);
    }

    private TreeNode conduct(int[] num, int left, int right) {
        if(left > right) {
            return null;
        }
        if(left == right) {
            return new TreeNode(num[left]);
        }
        int mid = (left + right + 1)/2;
        TreeNode node = new TreeNode(num[mid]);
        node.left = conduct(num, left, mid - 1);
        node.right = conduct(num, mid + 1, right);
        return node;
    }

有一个关键点:int mid = (left + right + 1)/2;
由于数组下标从0️⃣开始,一个长度为奇数的数组,其中间结点下标为(首结点下标 + 尾结点下标 + 1)/2。

全部评论

相关推荐

点赞 评论 收藏
分享
牛客76783384...:字节:不要放箭,活捉赵子龙
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务