leetcode 894. 所有可能的完整二叉树
发布日期:2021-06-21 09:00:08 浏览次数:3 分类:技术文章

本文共 1153 字,大约阅读时间需要 3 分钟。

题目:

完整二叉树是一类二叉树,其中每个结点恰好有 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
allPossibleFBT(int N) { cout<
<
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
L = allPossibleFBT(i); vector
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;}

 

转载地址:https://blog.csdn.net/lwgkzl/article/details/82109814 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c++ auto基本用法
下一篇:python mock 打桩抛出异常

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月23日 03时47分00秒