95. 不同的二叉搜索树 II
生活随笔
收集整理的這篇文章主要介紹了
95. 不同的二叉搜索树 II
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給定一個(gè)整數(shù) n,生成所有由 1 ...?n 為節(jié)點(diǎn)所組成的二叉搜索樹。
示例:
輸入: 3
輸出:
[
??[1,null,3,2],
??[3,2,null,1],
??[3,1,null,null,2],
??[2,1,3],
??[1,null,2,null,3]
]
解釋:
以上的輸出對(duì)應(yīng)以下 5 種不同結(jié)構(gòu)的二叉搜索樹:
? ?1 ? ? ? ? 3 ? ? 3 ? ? ?2 ? ? ?1
? ? \ ? ? ? / ? ? / ? ? ?/ \ ? ? ?\
? ? ?3 ? ? 2 ? ? 1 ? ? ?1 ? 3 ? ? ?2
? ? / ? ? / ? ? ? \ ? ? ? ? ? ? ? ? \
? ?2 ? ? 1 ? ? ? ? 2 ? ? ? ? ? ? ? ? 3
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
解法:?
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<TreeNode *> generateTrees(int n) {if (n == 0) return {};return *generateTreesDFS(1, n);}vector<TreeNode*> *generateTreesDFS(int start, int end) {vector<TreeNode*> *subTree = new vector<TreeNode*>();if (start > end) {subTree->push_back(NULL);} else {for (int i = start; i <= end; ++i) {vector<TreeNode*> *leftSubTree = generateTreesDFS(start, i - 1);vector<TreeNode*> *rightSubTree = generateTreesDFS(i + 1, end);for (int j = 0; j < leftSubTree->size(); ++j) {for (int k = 0; k < rightSubTree->size(); ++k) {TreeNode *node = new TreeNode(i);node->left = (*leftSubTree)[j];node->right = (*rightSubTree)[k];subTree->push_back(node);}}}}return subTree;} };?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的95. 不同的二叉搜索树 II的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 96. 不同的二叉搜索树
- 下一篇: 106. 从中序与后序遍历序列构造二叉树