lintcode-不同的二叉查找树II

给出n,生成所有由1...n为节点组成的不同的二叉查找树

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @paramn n: An integer
     * @return: A list of root
     */
     
    vector<TreeNode *> createTrees(int start, int end) {
        
        vector<TreeNode *> ret;
        
        if(start > end) {
            ret.push_back((TreeNode *)NULL);
            return ret;
        } 
        
        if(start == end) {
            TreeNode * node = new TreeNode(start);
            ret.push_back(node);
            return ret;
        }
        
        for(int i = start; i <= end; ++i) {
            vector<TreeNode *> left = createTrees(start, i-1);
            vector<TreeNode *> right = createTrees(i+1, end);
            
            for(auto lnode : left) {
                for(auto rnode : right) {
                    TreeNode * root = new TreeNode(i);
                    root->left = lnode;
                    root->right = rnode;
                    ret.push_back(root);   
                }
             }
        }
        
        return ret;
    }
     
    vector<TreeNode *> generateTrees(int n) {
        // write your code here
        
        return createTrees(1, n);
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,509评论 1 31
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,243评论 0 12
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,410评论 0 25
  • 基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平...
    yhthu阅读 4,362评论 1 5
  • 又到了星期二问简书的时间,有什么问题,请放马过来问。提问之前,请看一下我们对一些常见问题的解答: 简书手机app的...
    简书阅读 1,498评论 78 16