95. Unique Binary Search Trees II (独一无二的二叉搜索树之二)
来源:互联网 发布:高端化妆品知乎 编辑:程序博客网 时间:2024/06/03 23:41
Given 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
confused what “{1,#,2,3}” means? > read more on how binary tree is serialized on OJ.
OJ’s Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where ‘#’ signifies a path terminator where no node exists below.
Here’s an examp
1
/ \
2 3
/
4
\
5
above binary tree is serialized as “{1,2,3,#,#,4,#,#,5}”.
这道题是之前的 Unique Binary Search Trees 独一无二的二叉搜索树的延伸,之前那个只要求算出所有不同的二叉搜索树的个数,这道题让把那些二叉树都建立出来。这种建树问题一般来说都是用递归来解,这道题也不例外,划分左右子树,递归构造。至于递归函数中为啥都用的是指针,是参考了网友水中的鱼的博客,若不用指针,全部实例化的话会存在大量的对象拷贝,要调用拷贝构造函数,具体我也不太懂,反正感觉挺有道理的,不明觉厉啊-.-!!!
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; }};
笔记:这种递归调用涉及到了指针和vector
- 95. Unique Binary Search Trees II (独一无二的二叉搜索树之二)
- LeetCode OJ 之 Unique Binary Search Trees II (不同的二叉搜索树 - 二)
- 动态规划——Unique Binary Search Trees 独一无二的二叉搜索树【LeetCode】
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
- LeetCode 95. Unique Binary Search Trees II(唯一二叉搜索树)
- LeetCode 95. Unique Binary Search Trees II&96. Unique Binary Search Trees--动态规划,二叉树
- LeetCode OJ 之 Unique Binary Search Trees (不同的二叉搜索树)
- Unique Binary Search Trees II 二叉查找树的路径
- Unique Binary Search Trees II 二叉树的种类
- Leetcode 95. Unique Binary Search Trees II 二叉搜索树2 解题报告
- LeetCode | Unique Binary Search Trees II(构建二叉搜索树)
- leetcode 95. Unique Binary Search Trees II 递归构造所有可能的搜索二叉树BST + 卡特兰数
- 164.Unique Binary Search Trees II-不同的二叉查找树 II(中等题)
- LeetCode | Unique Binary Search Trees(二叉搜索树的个数)
- Leetcode 96 Unique Binary Search Trees(独一的二叉搜索树)
- LeetCode--Unique Binary Search Trees (不同二叉搜索树的个数)Python
- [LeetCode]Unique Binary Search Trees II生成所有二叉搜索树
- LeetCode-95-Unique Binary Search Trees II 二叉树
- jquery中的html和text的区别
- 设计师应该学会的行为设计学
- SpringMVC 上传和下载核心代码
- Redis的安装配置运行
- LINUX系统以及ANDROID 平台log信息输出级别设置 [MTK]
- 95. Unique Binary Search Trees II (独一无二的二叉搜索树之二)
- ExpressRoute 线路预配工作流和线路状态
- 欢迎使用CSDN-markdown编辑器
- github&git
- Java中 Null & " " 的概念,与区别
- Hive分桶
- AmazonS3文档——对象存储的用法之《对象操作》
- MyEclipse安装android环境碰到的错误集锦
- CentOS6下tmux安装和使用