首页 > 其他 > 详细

leetcode_894. All Possible Full Binary Trees

时间:2019-03-23 10:51:21      阅读:145      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/jasonlixuetao/p/10582693.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!