Unique Binary Search Trees II
来源:互联网 发布:php自动加载机制 编辑:程序博客网 时间:2024/04/30 07:18
题目
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
方法一
使用递归,DFS遍历。
public List<TreeNode> getTrees(int start, int end) { List<TreeNode> list = new ArrayList<TreeNode>(); if (start > end) { list.add(null); return list; } for (int i = start; i <= end; i++) { List<TreeNode> left = getTrees(start, i - 1); List<TreeNode> right = getTrees(i + 1, end); for (int j = 0; j < left.size(); j++) { for (int k = 0; k < right.size(); k++) { TreeNode root = new TreeNode(i); root.left = left.get(j); root.right = right.get(k); list.add(root); } } } return list; }public List<TreeNode> generateTrees(int n) { return getTrees(1, n);}
方法二
将递归转换为迭代,思想和方法一类似。// public TreeNode clone(TreeNode root, int j) {//if (root == null) {//return null;//}//TreeNode node = new TreeNode(root.val + j);//node.left = clone(root.left, j);//node.right = clone(root.right, j);//return node;//}////public List<TreeNode> generateTrees(int n) {// List<List<TreeNode>> list = new ArrayList<List<TreeNode>>();// List<TreeNode> zero = new ArrayList<TreeNode>();// TreeNode zeroNode = null;// zero.add(zeroNode);// List<TreeNode> one = new ArrayList<TreeNode>();// TreeNode oneNode = new TreeNode(1);// one.add(oneNode);// List<TreeNode> two = new ArrayList<TreeNode>();// TreeNode twoNodeFirst = new TreeNode(1);// twoNodeFirst.right = new TreeNode(2);// TreeNode twoNodeSecond = new TreeNode(2);// twoNodeSecond.left = new TreeNode(1);// two.add(twoNodeFirst);// two.add(twoNodeSecond);// list.add(zero);// list.add(one);// list.add(two);// if (n <= 2) {// return list.get(n);// }// for (int i = 3; i <= n; i++) {// List<TreeNode> cur = new ArrayList<TreeNode>();// int len = i;// for (int j = 1; j <= len; j++) {// List<TreeNode> left = list.get(j - 1);// int leftSize = left.size();// List<TreeNode> right = list.get(len - j);// int rightSize = right.size();// for (int p = 0; p < leftSize; p++) {//// for (int q = 0; q < rightSize; q++) {// TreeNode root = new TreeNode(j);// // TreeNode leftNode = left.get(p);// TreeNode rightNode = right.get(q);// if (rightNode == null) {// root.right = rightNode;// } else {// TreeNode newRightNode = clone(rightNode, j);// root.right = newRightNode;// }// root.left = leftNode;// cur.add(root);// }// }// }// list.add(cur);// }// return list.get(n);//}
0 0
- 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
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- 9508 诸葛给我牌
- 有效沟通-非暴力沟通
- 按键驱动程序设计笔记
- OS
- java的equals方法重写注意事项
- Unique Binary Search Trees II
- 轻松地集成动态条形码到Microsoft® Windows® Mobile, PocketPC的条码控件Mobile Barcode PocketPC DLL
- 8611 大牛之路I
- Activity
- In order to understandC++
- DB2数据库基础总结
- mysql 开启远程登录
- UML静态模型图
- XStream 用法详解 XML 转换为 java 实体类