码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Unique Binary Search Trees II

时间:2015-04-23 17:35:14      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

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

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


OJ‘s Binary Tree Serialization:

The serialization of a binary tree follows a level order traversal, where ‘#‘ signifies a path terminator where no node exists below.

Here‘s an example:

   1
  /  2   3
    /
   4
         5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
题意:求由n个数组成的二插搜索树的可能。

思路:n个数都是可以作为树的结点的,所以每层都选择一个结点后,然后再组合左右两个子树的情况。

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; left = null; right = null; }
 * }
 */
public class Solution {
public List<TreeNode> generateTrees(int n) {
		return dfs(0, n-1);
    }

	private List<TreeNode> dfs(int beg, int end) {
		List<TreeNode> ans = new ArrayList<TreeNode>();
		if (beg > end) {
			ans.add(null);
			return ans;
		}
		
		for (int i = beg; i <= end; i++) {
			List<TreeNode> left = dfs(beg, i-1);
			List<TreeNode> right = dfs(i+1, end);
			for (int j = 0; j < left.size(); j++)
				for (int k = 0; k < right.size(); k++) {
					TreeNode tmp = new TreeNode(i+1);
					ans.add(tmp);
					tmp.left = left.get(j);
					tmp.right = right.get(k);
				}
		}
		
		return ans;
	}
}




LeetCode Unique Binary Search Trees II

标签:

原文地址:http://blog.csdn.net/u011345136/article/details/45223149

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!