leetcode_894. All Possible Full Binary Trees
Posted Jason333
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode_894. All Possible Full Binary Trees相关的知识,希望对你有一定的参考价值。
https://leetcode.com/problems/all-possible-full-binary-trees/
给定节点个数,求所有可能二叉树,该二叉树所有节点要么有0个子节点要么有两个子节点。返回所有二叉树的头指针。
一开始一直想的是从根节点开始建树,一直想不出来方法。后来想到可以从子节点开始建树,问题就很好解决了。
class Solution { public: vector<TreeNode*> allPossibleFBT(int N) { vector<TreeNode*> ret; if(N == 1) { TreeNode* rt = new TreeNode(0); ret.push_back(rt); return ret; } for(int i=1; i<=(N-1)/2; i+=2) //左子树的节点数 { vector<TreeNode*> left = allPossibleFBT(i); //创建所有可能左子树 vector<TreeNode*> right = allPossibleFBT(N-1-i); //创建所有可能的右子树 for(int j=0;j<left.size();j++) //遍历所有左子树 for(int k=0;k<right.size();k++) //遍历所有右子树 { TreeNode * rt = new TreeNode(0); //创建根节点 rt->left = left[j]; rt->right = right[k]; ret.push_back(rt); if(i != N-1-i) //如果左右子树节点数不同,交换左右子树也是一种可能 { TreeNode * rt2 = new TreeNode(0); rt2->left = right[k]; rt2->right = left[j]; ret.push_back(rt2); } } } return ret; } };
以上是关于leetcode_894. All Possible Full Binary Trees的主要内容,如果未能解决你的问题,请参考以下文章
***Leetcode 894. All Possible Full Binary Trees
leetcode 894. 所有可能的满二叉树(All Possible Full Binary Trees)