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)