LintCode中第177题,解答代码如下:
private static TreeNode sortedArrayToBST(int[] A) { TreeNode root = recursion(A, 0, A.length - 1); return root; } /** * 递归+二分法 * @param array 要排序的数组 * @param left 数组中起始位置 * @param right 数组中结束位置 * @return */ private static TreeNode recursion(int[] array, int left, int right) { if (left > right) { return null; } int mid = (left + right) >> 1; TreeNode root = new TreeNode(array[mid]); root.left = recursion(array, left, mid - 1); root.right = recursion(array, mid + 1, right); return root; }
总结:算法使用了递归+二分思想
二叉搜索树是左子节点小于根结点,右子节点大于根结点。由上到下构造二叉搜索树,并且树高度最小,就要每次找出数值大小位于中间的结点,跟二分法思路相同,使用二分思想,先构造根结点,再递归构造左子节点,最后递归构造右子节点。
在跟树有关的算法中,很多都用到递归,需要深刻理解递归思想。