将排序数组插入二叉搜索树

Ege*_*Ege 7 sorting algorithm tree binary-tree binary-search-tree

我想实现一个算法,将已排序的数组插入到二叉搜索树中,但我不希望最终得到一个只生长到一侧的树.

你有什么想法?

谢谢.

Duk*_*ing 11

这应该给你一个平衡的树(在O(n)中):

  1. 为数组中的中间元素构造一个节点并返回它
    (这将是基本情况下的根).
  2. 从数组的左半部分重复1.将返回值分配给根的左子节点.
  3. 从数组的右半部分重复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);
}
Run Code Online (Sandbox Code Playgroud)

代码源自此处.