首页 > 其他 > 详细

Unique Binary Search Trees II

时间:2014-12-03 22:43:46      阅读:296      评论:0      收藏:0      [点我收藏+]

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
/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int *f;
    TreeNode* generateTree(int rank, int base, int n) {
        if (n == 0) return NULL;
        if (n == 1) return new TreeNode(base);
        for (int i = 0; i < n; ++i) {
            rank -= f[i] * f[n - 1 - i];
            if (rank < 0) {
                TreeNode* root = new TreeNode(base + i);
                rank += f[i] * f[n - 1 - i];
                root->left = generateTree(rank % f[i], base, i);
                root->right = generateTree(rank / f[i], base + i + 1, n - 1 - i);
                return root;
            }
        }
    }
    vector<TreeNode *> generateTrees(int n) {
        f = new int[n + 1];
        f[0] = f[1] = 1;
        for (int i = 2; i <= n; ++i) {
            f[i] = 0;
            for (int j = 0; j < i; ++j) f[i] += f[j] * f[i - 1 - j];
        }
        vector<TreeNode *> result;
        for (int i = 0; i < f[n]; ++i) result.push_back(generateTree(i, 1, n));
        return result;
    }
};

 

Unique Binary Search Trees II

原文:http://www.cnblogs.com/code-swan/p/4141186.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!