个人记录-LeetCode 108. Convert Sorted Array to Binary Search Tree

来源:互联网 发布:云计算 paas 编辑:程序博客网 时间:2024/06/07 08:25

问题:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

这个问题要求我们生成一个平衡二叉树。

直接生成AVL树是比较困难的,
需要不断地判断是否需要进行旋转相关的工作。

但如果输入是一个排序数组的话,就相对比较容易了。

由于AVL树需要保证左、右子树的深度差不超过1,
因此就是要保证左、右子树的节点数量几乎相等。

于是我们可以用排序数组的中间节点作为根节点,
分别得到AVL的左、右子树。

代码示例:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode sortedArrayToBST(int[] nums) {        //判断参数的有效性        if (nums == null || nums.length == 0) {            return null;        }        //递归得到整个AVL树,初始范围为整个数组        return innerHelper(nums, 0, nums.length-1);    }    private TreeNode innerHelper(int[] nums, int begin, int end) {        if (begin > end) {            return null;        }        //每次取中间节点为根节点        int mid = (begin + end) / 2;        TreeNode root = new TreeNode(nums[mid]);        //用根节点的左侧的数生成左子树        root.left = innerHelper(nums, begin, mid-1);        //用根节点的右侧的数生成右子树        root.right = innerHelper(nums, mid+1, end);        return root;    }}
0 0