LeetCode | Unique Binary Search Trees II

来源:互联网 发布:oracle导入数据 编辑:程序博客网 时间:2024/04/30 04:33

Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1…n.

For example,
Given n = 3, your program should return all 5 unique BST’s shown below.

1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3

模拟,递归~


注意这里的递归是写在循环里的【因为要求返回数组】


虽然是把这些数强行推到了一个数组里面,但是好歹还是写出来了OTZ

class Solution {public:    vector<TreeNode*> generateTrees(int n) {        if(n==0){            vector<TreeNode*> result;            return result;        }        vector<int> nodes;        for(int i=1;i<=n;i++) nodes.push_back(i);        return getTree(nodes);    }    //生成一颗子树,这棵子树里面有nodes个节点    vector<TreeNode*> getTree(vector<int>& nodes){        vector<TreeNode*> subTree;        int n=nodes.size();        if(n==0){            subTree.push_back(NULL);            return subTree;        }        for(int i=0;i<n;i++){            //选取一个节点            TreeNode* node=new TreeNode(nodes[i]);            //左右孩子节点            vector<int> leftnodes,rightnodes;            for(int j=0;j<i;j++) leftnodes.push_back(nodes[j]);            for(int j=i+1;j<n;j++) rightnodes.push_back(nodes[j]);            //左右孩子树            vector<TreeNode*> left=getTree(leftnodes);            vector<TreeNode*> right=getTree(rightnodes);            for(int k=0;k<left.size();k++){                for(int l=0;l<right.size();l++){                    //选取一个节点                    TreeNode* node=new TreeNode(nodes[i]);                    node->left=left[k];                    node->right=right[l];                    subTree.push_back(node);                }            }        }        return subTree;    }};
0 0
原创粉丝点击