生成所有可能的二叉排序树 Unique Binary Search Trees II
来源:互联网 发布:win7 ubuntu 安装教程 编辑:程序博客网 时间:2024/04/19 17:32
问题: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
可参考: 构成的二叉查找树的个数 Unique Binary Search Trees
思路:对于每一个新的变化,都需要重新产生所有的结点。最终要的是根节点。采用的是backtrack方法。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<TreeNode *> generateTrees(int n) { vector<TreeNode *> result; if(n == 0) { result.push_back(NULL); return result; } return generate(1, n); } vector<TreeNode *> generate(int l, int r) { vector<TreeNode *> rootset; if(l > r) { rootset.push_back(NULL); return rootset; } for(int i=l;i<=r;i++) { vector<TreeNode *> left = generate(l, i-1); vector<TreeNode *> right = generate(i+1, r); for(int m=0;m<left.size();m++) for(int n=0;n<right.size();n++) { TreeNode *p = new TreeNode(i); p->left = left[m]; p->right = right[n]; rootset.push_back(p);//注意:虽然p结点是新的,但是其孩子结点对于不同的树存在共用 } } return rootset; }};
0 0
- 生成所有可能的二叉排序树 Unique Binary Search Trees II
- leetcode95-Unique Binary Search Trees II(输出所有可能的BST)
- leetcode 95. Unique Binary Search Trees II 递归构造所有可能的搜索二叉树BST + 卡特兰数
- [LeetCode]Unique Binary Search Trees II生成所有二叉搜索树
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees (& II)
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- C趣味编程]常胜将军(取火柴游戏)
- js取整
- C++ void基础概念讲述
- 马云北大演讲,阿里巴巴为什么能活着?
- Codefoeces 404D Minesweeper 1D "小范围后效性"dp
- 生成所有可能的二叉排序树 Unique Binary Search Trees II
- 关于指针数组与数组指针的总结
- javascripte 中的移位操作符
- TCP和UDP的区别
- join/inner join/left join/right join区别
- 么么哒第一篇
- 不要在finally块中处理返回值
- C/c++中移位与负数表达的一点研究
- Native关键字---小笔记