赞
踩
完整二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。
返回包含 N
个结点的所有可能完整二叉树的列表。 答案的每个元素都是一个可能树的根结点。
答案中每个树的每个结点
都必须有 node.val=0
。
你可以按任何顺序返回树的最终列表。
示例:
输入:7 输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]] 解释:
提示:
1 <= N <= 20
中等题,其实思路不难,对于我这种手残选手而言,难的是coding。一看就是递归解决,并且一个端点只允许两种情况,无节点或者两个节点。但是其返回值是头结点,用简单的递归是返回不了头结点的,因为递归总是从上而下的,递归到最后就是子节点的。这题需要在返回的时候声明一个节点作为头结点root,然后左右递归的子返回值作为其子节点,我们就可以返回这个root了。
递归的返回值,需要自行声明一个新的节点作为这个子树的头结点。
- vector<TreeNode*> allPossibleFBT(int N) {
- cout<<N<<endl;
- vector<TreeNode*> ve;
- if(N==0)return ve;
- if(N==1){
- TreeNode* ans = new TreeNode(0);
- ve.push_back(ans);
- return ve;
- }
- N = N-1;
- for(int i=1;i<=N;i+=2){
- vector<TreeNode*> L = allPossibleFBT(i);
- vector<TreeNode*> R = allPossibleFBT(N-i);
- for(TreeNode* i : L){
- for(TreeNode* j : R){
- TreeNode* root = new TreeNode(0);
- root->left = i;
- root->right = j;
- ve.push_back(root);
- }
- }
- }
- return ve;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。