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
思路:
1.能想到递归,只不过做的时候是采用向下递归,每次找到n-1的所有树序列,对于每棵树进行遍历,通过找节点的所有右节点,并每次将其替换成当前值为n的节点,以被替换节点为根的子树被作为值为n的节点的左孩子,因此此时树仍然是BST
缺陷:由于每次遍历,都需要修改树的形状,然后在将该树存至结果,因此必须保存有当前的树,然后由于指针会改变树的形状,因此只有重新递归找到n-1的树集合,定位到上一次修改的树,同时还需记录修改到树的哪一节点,因此开销会增加,而且似乎实现起来比较麻烦。。。但可以确定,此方法可以生成BST
2.还是递归,不过此时是通过控制根节点,左右孩子通过遍历得到(从网上得到的思路,感觉很赞),此时只需要将根节点的左右指针分别对应上左右子树即可,很容易实现,以及思路很巧妙