LeetCode OJ :Unique Binary Search Trees II(唯一二叉搜索树)
2015-10-03 23:00
661 查看
题目如下所示:返回的结果是一个Node的Vector:
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.
这一题实际上更另外一个叫做different ways to add parentheses的题目比较相似,这个详见上一篇博文。
java版本的代码如下:
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 a binary tree node. * 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) { return createNode(1, n); } vector<TreeNode*> createNode(int start, int end) { vector<TreeNode*> result; if(start > end){ result.push_back(NULL); return result; } for(int i = start; i <= end; ++i){ vector<TreeNode*> leftNode = createNode(start, i - 1); vector<TreeNode*> rightNode = createNode(i + 1, end); for(int j = 0; j < leftNode.size(); ++j){ for(int k = 0; k < rightNode.size(); ++k){ TreeNode * tmpNode = new TreeNode(i); tmpNode->left = leftNode[j]; tmpNode->right = rightNode[k]; result.push_back(tmpNode); } } } return result; } };
这一题实际上更另外一个叫做different ways to add parentheses的题目比较相似,这个详见上一篇博文。
java版本的代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<TreeNode> generateTrees(int n) { if(n == 0)//如果不加上这一条,当为0的时候会返回[[]],不知道为什么,很奇怪 return new ArrayList<TreeNode>(); return createTree(1, n); } public List<TreeNode> createTree(int start, int end){ ArrayList<TreeNode> result = new ArrayList<TreeNode>(); if(start > end){ result.add(null); return result; } for(int i = start; i <= end; ++i){ for(TreeNode leftNode : createTree(start, i - 1)){ for(TreeNode rightNode : createTree(i + 1, end)){ TreeNode node = new TreeNode(i); node.left = leftNode; node.right = rightNode; result.add(node); } } } return result; } }
相关文章推荐
- 张氏web漏洞检查工具发布-英文名:Mr.Zhang Web Leak Scanner GUI
- 动态计算UITableViewCell高度详解
- hdu 1242 Rescue(bfs+优先队列)
- SPOJ QTREE - Query on a tree(树链剖分)
- iOS大典之UIScrollView
- [java学习笔记]java语言基础概述之转义字符&break&continue
- android--day02(UI、事件)
- iOS图文攻略之UILabel属性
- UITableViewDelegate方法
- 选择Key-Value Store
- Key-Value存储系统简介
- (一三〇)UITextField的光标操作扩展
- (一三〇)UITextField的光标操作扩展
- Permutation Sequence
- iOS图文攻略之UIView 属性
- Leetcode catalogue
- 关于queue和stack没有clear方法
- sqlite采用UUID主键和int型自增主键性能对比测试
- goquery使用
- UITextField  中文输入法