バイナリ検索ツリー(分割統治思想(再帰|反復))への[ツリー] C013_整然と配列

一つ、タイトル説明

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1

给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
      0
     / \
   -3   9
   /   /
 -10  5

第二に、問題解決

方法の一つ:分割統治

バイナリ検索ツリーのプロパティ:

  • 任意のノードの左の部分木が空でない場合、次に、全てのノードは、以下のルートの値より左の部分木の値であります
  • 任意のノードの右サブツリーが空でない場合、右サブツリー・ノードは、そのルートの値より大きいすべての値であります
  • 左と右のサブツリーの任意のノードが二分探索木です
  • いいえ同等のキーノードません

バイナリ検索ツリートラバーサルシーケンス(ルート左右)に増加するシーケンスになります。

public TreeNode sortedArrayToBST(int[] nums) {
  return inOrder(nums, 0, nums.length);
}
private TreeNode inOrder(int[] arr, int l, int r) {
  if (l == r) {
    return null;
  }
  int mid = l + ((r-l) >>> 1);
  TreeNode root = new TreeNode(arr[mid]);
  root.left =  inOrder(arr, l, mid);
  root.right = inOrder(arr, mid + 1, r);
  return root;
}

複雑性分析

  • 時間計算: ザ・ n個 O(N)
  • 宇宙の複雑さ: ザ・ n個 O(N)

方法2:反復


複雑性分析

  • 時間計算: ザ・ ()
  • 宇宙の複雑さ: ザ・ ()
公開された495元の記事 ウォンの賞賛105 ・は 30000 +を見て

おすすめ

転載: blog.csdn.net/qq_43539599/article/details/104801149