Given n, generate all structurally unique BST 's (binary search trees) that store values 1 ... n.
For example,
Given N = 3, your program should return all 5 unique BST ' s shown below.
1 3 3 2 1 \// /\ 3 2 1 1 3 2 / / \ 2 1 2 3
Analysis: For n, the valid BST has C (n,2*n)/(n+1)) species.
According to the post-order achievements, [1,.. I-1] I [i+1,.. N] First build the right and left to the legal BST, and then received root.
The left sub-tree form has m species, the right subtree has k species, then try to m*k the way of splicing.
Public list<treenode> generatetrees (int l, int r) { list<treenode> List = new Arraylist<treenode> ( ); if (L > R) { list.add (null); return list; } for (int i = l; I <= R; i++) { list<treenode> lefts = Generatetrees (l, i-1); list<treenode> rights = Generatetrees (i + 1, r); for (TreeNode left:lefts) {for (TreeNode right:rights) { TreeNode root = new TreeNode (i); Root.left = left; Root.right = right; List.add (root); }}} return list; } Public list<treenode> generatetrees (int n) { return generatetrees (1, n); }
Generate all the BST