Leetcode#95 Unique Binary Search Trees II

4330 단어 Binary search
원제 주소
 
Unique Binary Search Trees(이 문장 참조)의 업그레이드 버전
문제를 풀 때 나는 이것이 두 갈래 나무마다 독립적으로 하나를 만드는 것이 얼마나 번거로운지 생각했다.'공공부분'을 함께 사용할 수 있는지 시험해 보았는데, 과연 괜찮았구나, 하하.
trees[i][j]는 디지털 i부터 j까지 구성할 수 있는 모든 두 갈래 나무의 뿌리 노드를 나타낸다
 
코드:
 1 vector<TreeNode *> generateTrees(int n) {

 2         if (n < 1)

 3             return vector<TreeNode *>(1, NULL);

 4 

 5         vector<vector<vector<TreeNode *> > > trees(n + 1, vector<vector<TreeNode *> >(n + 1, vector<TreeNode *>()));

 6 

 7         for (int len = 1; len <= n; len++) {

 8             for (int i = 1, j = i + len - 1; j <= n; i++, j++) {

 9                 for (int k = i; k <= j; k++) {

10                     vector<TreeNode *> lefts = k == i ? vector<TreeNode *>(1, NULL) : trees[i][k - 1];

11                     vector<TreeNode *> rights = k == j ? vector<TreeNode *>(1, NULL) : trees[k + 1][j];

12                     for (auto l : lefts) {

13                         for (auto r : rights) {

14                             TreeNode *node = new TreeNode(k);

15                             node->left = l;

16                             node->right = r;

17                             trees[i][j].push_back(node);

18                         }

19                     }

20                 }

21             }

22         }

23         

24         return trees[1][n];

25 }

좋은 웹페이지 즐겨찾기