Leetcode-95.Unique Binary Search Trees II(a representative recursion problem)

题目:

Given an integer 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

Subscribe to see which companies asked this question

AC代码:

class Solution {
 public:
	 vector<TreeNode*> generateTrees(int n) {
		 vector<TreeNode *>result;
		 if (n == 0)return result;
		 result = generateSubTree(1,n);
		 return result;
	 }

	 vector<TreeNode *> generateSubTree(int start,int end){//产生从start到end之间编号的子树
		 vector<TreeNode *>re;
		 if (end < start)return re;
		 if (end - start == 0){
			 TreeNode *temp = new TreeNode(end);
			 re.push_back(temp);
			 return re;
		 }
		 for (int root = start; root <= end;root++){//根节点编号
			 vector<TreeNode *>left = generateSubTree(start,root-1);//产生左子树
			 vector<TreeNode *>right = generateSubTree(root+1,end);//产生右子树
			 int leftnum = left.size();
			 int rightnum = right.size();
			 for (int i = 0; i < (leftnum==0?1:leftnum);i++){
				 for (int j = 0; j < (rightnum==0?1:rightnum);j++){
					 TreeNode *tem = new TreeNode(root);
					 tem->left = (leftnum==0?NULL:left[i]);
					 tem->right = (rightnum==0?NULL:right[j]);
					 re.push_back(tem);
				 }
			 }
		 }
		 return re;
	 }
 };


分析:这道题是Leetcode-95.Unique Binary Search Trees的升级,基本思想是类似的,但是这里需要注意的是vector<TreeNode*>存放的是每棵树的根节点

的指针,容器的大小代表其存放的二叉搜索树的数量。在递归求解中,

1.将每个节点的指针依次存放到根节点的左右子树区域(left和right)。

2.通过数字root来划分左右字数的数字,并将它们形成的子二叉搜索树链接起来。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值