894. All Possible Full Binary Trees的C++解法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/musechipin/article/details/82758980

这个问题还是常规的递归问题,不太一样的是每个整数都将会返回一个vector<TreeNode*>。所以找到这个vector之后需要再用两个for循环遍历所有的左右子树可能的组合。

几个注意事项:

1.完全二叉树一定是一个奇数,所以偶数可以直接返回空。

2.一棵完全二叉树的左右子树都是技术,所以遍历的时候不是i++而是i+=2。

3.vector在建立后,如果没有初始化值,不可以用下标访问。本来我想用vector的下标作为N,将cache定义为一个

vector<vector<TreeNode*>>,但是后面访问的时候有错,改为map<vector<TreeNode*>>即可。

class Solution {
public:
	
	vector<TreeNode*> allPossibleFBT(int N) {
		map<int, vector<TreeNode*>> cache;
		vector<TreeNode*> res;
		if (N % 2 == 0) return res;
		if (N == 1)
		{
			cache[1].push_back(new TreeNode(0));
		}			
		for (int i = 1; i <= N - 2; i=i+2)
		{
			int l = i;
			int r = N - 1 - i;
			cache[l] = allPossibleFBT(l);
			cache[r] = allPossibleFBT(r);
			for (int p = 0; p < cache[l].size(); p++)
				for (int q = 0; q < cache[r].size(); q++)
				{
					TreeNode* root = new TreeNode(0);
					root->left = cache[l][p];
					root->right = cache[r][q];
					cache[N].push_back(root);
				}
		}
		return cache[N];
	}
};

猜你喜欢

转载自blog.csdn.net/musechipin/article/details/82758980