894. All Possible Full Binary Trees

Posted zydxx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了894. All Possible Full Binary Trees相关的知识,希望对你有一定的参考价值。

一、题目描述

 

full binary tree is a binary tree where each node has exactly 0 or 2 children.

Return a list of all possible full binary trees with N nodes.  Each element of the answer is the root node of one possible tree.

Each node of each tree in the answer must have node.val = 0.

You may return the final list of trees in any order.

 

Example 1:

Input: 7
Output: [[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]]
Explanation:
技术分享图片

 大致意思:

根据输入的节点求最多能生成几个不相同的完全二叉树,将每个二叉树的根节点放在一个vector中返回。

二、解题思路:

首先求所有的完全二叉树首先需要清除完全二叉树的性质:

节点个数为奇数个

所有的节点要么是叶节点要么是度为2节点。

每个二叉树的左右子树也是完全二叉树,我们可以利用枚举思想枚举所有的左右子树的构造情况然后拼接,在求所有左右子树构造情况

时就成了与原问题相同的问题。

数据结构:

对于每一层递归用一个ans 数组来存在本层的所有情况。

代码如下:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     vector<TreeNode*> allPossibleFBT(int N) {
13         //枚举所有可能的左右子数将其根节点返回,对于左子树,右子树的构造同时也是一种递归的过程。
14         //首先题目要求根据节点数目输出相应的树的根节点,与节点顺序无关。
15         if(N==0)
16         {
17             return {};
18         }
19         if(N==1)
20         {
21             return {new TreeNode(0)};//返回值应该为vector 数据类型
22         }
23           vector<TreeNode*> ans;//ans 存放这一层递归可以构成的树情况。
24         for(int i=1;i<N;i+=2)
25         {
26             for(auto l: allPossibleFBT(i))//遍历所有左右子树的情况需要一个二重循环嵌套。
27             {
28                 for(auto r: allPossibleFBT(N-i-1))
29                 {
30                     auto root= new TreeNode(0);
31                     root->left=l;
32                     root->right=r;
33                     ans.push_back(root);
34                     
35                 }
36             }
37         }
38         return ans;
39     }
40 };

三、题目总结

在读本题没有正确get 到题目的点在哪里,导致一直没有思路。

以上是关于894. All Possible Full Binary Trees的主要内容,如果未能解决你的问题,请参考以下文章

894. All Possible Full Binary Trees

leetcode_894. All Possible Full Binary Trees

Leetcode 894. All Possible Full Binary Trees

leetcode 894. 所有可能的满二叉树(All Possible Full Binary Trees)

894. 所有可能的真二叉树

894. 所有可能的真二叉树