Unique Binary Search Trees II
2015-04-06 15:58
405 查看
题目大意:给定一个数n表示二叉树的节点数,求这么多个节点能够表示的所有二叉树
解题思路:先求出这些二叉树的结构,再用中序遍历去给这些二叉树节点赋值
解题思路:先求出这些二叉树的结构,再用中序遍历去给这些二叉树节点赋值
/** * 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) { if(n <= 0) { return vector<TreeNode *>(1, NULL); } vector<vector<TreeNode *> > dp(n + 1, vector<TreeNode *>()); dp[0].push_back(NULL); dp[1].push_back(new TreeNode(0)); for(int i = 2; i <= n; i++) { for(int low = 0, high = i - 1; low <= i - 1 && high >= 0; low++, high--) { for(vector<TreeNode *>::iterator low_iter = dp[low].begin(); low_iter != dp[low].end(); low_iter++) { for(vector<TreeNode *>::iterator high_iter = dp[high].begin(); high_iter != dp[high].end(); high_iter++) { TreeNode *tmp = new TreeNode(0); tmp->left = *low_iter; tmp->right = *high_iter; dp[i].push_back(tmp); } } } } vector<TreeNode *> result; for(vector<TreeNode *>::iterator iter = dp .begin(); iter != dp .end(); iter++) { TreeNode *root = new TreeNode(0); inorderTravelCopy(*iter, root); result.push_back(root); } return result; } private: void inorderTravelCopy(TreeNode *root, TreeNode *copyRoot) { if(root == NULL || copyRoot == NULL) { return; } TreeNode *cur = root; TreeNode *curCopy = copyRoot; int val = 1; stack<TreeNode *> vstack; stack<TreeNode *> copyStack; do { while(cur != NULL) { vstack.push(cur); copyStack.push(curCopy); cur = cur->left; if(cur != NULL) { curCopy->left = new TreeNode(0); curCopy = curCopy->left; } } TreeNode *tmp = vstack.top(); TreeNode *copyTmp = copyStack.top(); vstack.pop(); copyStack.pop(); copyTmp->val = val++; cur = tmp->right; if(cur != NULL) { copyTmp->right = new TreeNode(0); curCopy = copyTmp->right; } } while(!vstack.empty() || cur != NULL); } };
相关文章推荐
- [leetcode]Unique Binary Search Trees II
- leetcode:Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- [LeetCode P96] Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- Unique Binary Search Trees II
- 95. Unique Binary Search Trees II
- Unique Binary Search Trees II
- LeetCode 95 Unique Binary Search Trees II
- Unique Binary Search Trees II --lintcode
- [LeetCode]Unique Binary Search Trees II
- DP (3) -- Count Numbers with Unique Digits,Decode Ways,Unique Binary Search Trees I, II
- LeetCode | Unique Binary Search Trees II
- [leetcode] Unique Binary Search Trees II
- Unique Binary Search Trees,Unique Binary Search Trees II
- lintcode:Unique Binary Search Trees II
- 95. Unique Binary Search Trees II
- LeetCode-95. Unique Binary Search Trees II
- [Leetcode] Unique binary search trees ii 唯一二叉搜索树
- Leetcode: Unique Binary Search Trees II