我想实现一种将排序后的数组插入二叉搜索树中的算法,但是我不想以仅长到一侧的树结尾。
你有什么想法?
谢谢。
这应该为您提供平衡的树(以O(n)表示):
为数组中的中间元素构造一个节点并返回它 (这将是基本情况的根)。
从数组左半部分的1.开始重复,将返回值分配给根的左子节点。
类似Java的代码:
TreeNode sortedArrayToBST(int arr[], int start, int end) { if (start > end) return null; // same as (start+end)/2, avoids overflow. int mid = start + (end - start) / 2; TreeNode node = new TreeNode(arr[mid]); node.left = sortedArrayToBST(arr, start, mid-1); node.right = sortedArrayToBST(arr, mid+1, end); return node; } TreeNode sortedArrayToBST(int arr[]) { return sortedArrayToBST(arr, 0, arr.length-1); }
代码从这里派生。