894. 所有可能的真二叉树

Posted Debroon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了894. 所有可能的真二叉树相关的知识,希望对你有一定的参考价值。

894. 所有可能的真二叉树

 


题目

传送门:https://leetcode.cn/problems/all-possible-full-binary-trees/

 


算法设计:深度优先搜索

class Solution 
public:
    vector<TreeNode*> allPossibleFBT(int N) 
        vector<TreeNode*> ans;           // 记录N个节点能组合成的所有可能二叉树
        if(N < 1 || N % 2 == 0)          // 满二叉树不可能是偶数个节点
            return ans;
        
        for(int k = 2; k < N; k += 2)   // 递归生成所有符合条件的左右子树
            vector<TreeNode*> v1 = allPossibleFBT(k - 1);    // 生成左子树
            vector<TreeNode*> v2 = allPossibleFBT(N - k);    // 生成右子树
            int n1 = v1.size(), n2 = v2.size();
            
            // 左右子树的不同排列也能构成不同的二叉树
            for(int i = 0; i < n1; i++) 
                for(int j = 0; j < n2; j++) 
                    TreeNode* newRoot = new TreeNode(0);      // 生成根节点
                    
                    // 组装出一种可能的二叉树形状
                    newRoot->left = v1[i];
                    newRoot->right = v2[j];
                    ans.push_back(newRoot);                    // 加入结果列表
                
                  
        if(ans.empty()) 
            ans.push_back(new TreeNode(0));                      
        return ans;
    
;

以上是关于894. 所有可能的真二叉树的主要内容,如果未能解决你的问题,请参考以下文章

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

leetcode树专题894.897,919,951

leetcode_894. All Possible Full Binary Trees

完全二叉树+暴力预处理+归并排序——cf894D

二叉树(Binary Tree)类型特点

⭐算法入门⭐《二叉树》简单06 —— LeetCode 222. 完全二叉树的节点个数