给定一个整数 n,生成所有由 1...n 为节点组成的不同的二叉查找树。

题目解析:给定一个n,用1-n这些数字去创建搜索二叉树,并将所有搜索二叉树的头结点放到vector中返回。

解题思路:好吧,这题我也说不清是怎么肥事,自己举个例子画一画就明白了。

给定一个整数 n,生成所有由 1...n 为节点组成的不同的二叉查找树。_第1张图片

class Solution {
public:
	vector generateTrees(int n) {
		/*vector res;
		if (0 == n)
			return res;*///写成这样就不通过,可能是希望vector里面有	NULL吧
		return _generateTrees(1,n);
	}

	vector _generateTrees(int start, int end)
	{
		vector res;
		if (start > end)
		{
			res.push_back(NULL);
			return res;
		}
		for (int i = start; i <= end; i++)  //这是用来每个数都作为根的循环
		{
			vectorleft = _generateTrees(start, i - 1);
			vectorright = _generateTrees(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[j];
					root->right = right[k];
					res.push_back(root);
				}
			}
		}
		return res;
	}
};

 

你可能感兴趣的:(给定一个整数 n,生成所有由 1...n 为节点组成的不同的二叉查找树。)