95. Unique Binary Search Trees II

Difficulty:
Related Topics:
Similar Questions:

Problem

Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 … n.

Example:

Input: 3
Output:
[
  [1,null,3,2],
  [3,2,null,1],
  [3,1,null,null,2],
  [2,1,3],
  [1,null,2,null,3]
]
Explanation:
The above output corresponds to the 5 unique BST's shown below:

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3

Solution

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {number} n
 * @return {TreeNode[]}
 */
var generateTrees = function(n) {
  if (n < 1) return [];
  return generate(1, n);
};

var generate = function (l, r) {
  var nodes = [];
  var node = null;
  var left = [];
  var right = [];
  for (var i = l; i <= r; i++) {
    left = generate(l, i - 1);
    right = generate(i + 1, r);
    for (var j = 0; j < left.length; j++) {
      for (var k = 0; k < right.length; k++) {
        node = new TreeNode(i);
        node.left = left[j];
        node.right = right[k];
        nodes.push(node);
      }
    }
  }
  return nodes.length ? nodes : [null];
};

Explain:

例如:有 5 个节点,选取其中 1 个作为 root,还剩 4 个。则左右可分为 (0, 4), (1, 3), (2, 2), (3, 1), (4, 0) 等几种情况,左右的分配用递归得到即可。

Complexity:

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy