【leetcode】Unique Binary Search Trees II

来源:互联网 发布:手机隐藏软件 编辑:程序博客网 时间:2024/06/11 03:13

题目:给定整数n,返回所有结果为1,,n 的不重复二叉搜索树。

分析:在构建二叉树的题目中,我们了解到,给定二叉的中序遍历和前序遍历我们可以构建一棵唯一的二叉树,给定中序遍历和后序遍历,我们也能构建一棵唯一的二叉树。现在类似于只给定了中序遍历,那么,其构建出的树是不唯一的,即存在多棵,而具体的数量我们在题目一中计算过,是符合卡特兰的。

我们在构建唯一的二叉树的时候,我们可以用单一的指针去接收返回的子树结点,但是现在子树的结点不只一个,所以我们需要一个指针容器去接收。而以某个数字为节点的树的个数恰好是其左右子树的组合数。

//construct the BSFs whose inorder travel is // from start to end.//start and end used to constraint boundaryvector<TreeNode*> AddNodes(int start, int end){if( start > end)return vector<TreeNode*> (1, NULL);//container to store the root of each differ BSTvector<TreeNode*> roots;for (int i = start; i <= end; ++i){//get the left sonsvector<TreeNode*> lefts  = AddNodes(start, i - 1);//get the right sonsvector<TreeNode*> rights = AddNodes(i + 1, end);for (int l = 0; l < lefts.size(); ++l)for (int r = 0; r < rights.size(); ++r){TreeNode* root = new TreeNode(i);root->left = lefts[l];root->right = rights[r];roots.push_back(root);}}return roots;}vector<TreeNode *> generateTrees(int  n ) {vector<TreeNode*> roots;roots = AddNodes(1, n);return roots;}


0 0
原创粉丝点击