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

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

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

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

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

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

 

    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/wm12345645/article/details/81905365
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞