Java for LeetCode 095 Unique Binary Search Trees II

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.

解题思路:

参考Java for LeetCode 096 Unique Binary Search Trees思路,本题很容易解决。注意,如果试图不复制而使用对象的引用,是无法得到正确结果的,当然也可采用DFS的思路,但是考虑到JAVA面向对象的特征,我们还是采用Java for LeetCode 096 Unique Binary Search Trees的思路吧。

JAVA实现如下:

static public List<TreeNode> generateTrees(int n) {
		List<TreeNode> list = new ArrayList<TreeNode>();
		if (n == 0) {
			list.add(null);
			return list;
		}
		if (n == 1) {
			list.add(new TreeNode(1));
			return list;
		}
		for (int k = 0; k <= n - 1; k++) {
			List<TreeNode> left = generateTrees(k);
			List<TreeNode> right = generateTrees(n - k - 1);
			for (TreeNode rightNode : right)
				plus(rightNode, k + 1);
			for (TreeNode leftNode : left) {
				for (TreeNode rightNode : right) {
					TreeNode TN = new TreeNode(k + 1);
					TN.left = treeNodeClone(leftNode);
					TN.right = treeNodeClone(rightNode);
					list.add(TN);
				}
			}
		}
		return list;
	}
	public static void plus(TreeNode root, int num) {
		if (root == null)
			return;
		root.val += num;
		plus(root.left, num);
		plus(root.right, num);
	}
	public static TreeNode treeNodeClone(TreeNode TN1){
		if(TN1==null)
			return null;
		TreeNode TN2=new TreeNode(TN1.val);
		TN2.left=treeNodeClone(TN1.left);
		TN2.right=treeNodeClone(TN1.right);
		return TN2;
	}

 

posted @ 2015-05-21 17:23  TonyLuis  阅读(183)  评论(0编辑  收藏  举报