Leetcode 96. 不同的二叉搜索树(简单) 95. 不同的二叉搜索树II(中等)
思路:labuladong
96. 不同的二叉搜索树(简单)
题目:给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
* 输入:n = 3
* 输出:5
* 示例 2:
* 输入:n = 1
* 输出:1
思路:
可以使用递归的思想,选定i为根节点后,可能性就是count(low,i-1)*count(i+1,high)。那么遍历1-n,累加所有可能性即可
这里遍历时,会存在重复递归的问题,因此可以使用mem[n+1][n+1]记录count值
class Solution { public: int numTrees(int n) { mem=vector<vector<int>>(n+1,vector<int>(n+1,0)); return count(1,n); } int count(int lo, int hi){ if(lo>hi) return 1; if(mem[lo][hi]!=0) return mem[lo][hi]; int ret=0; for(int i=lo;i<=hi;++i){ int left=count(lo,i-1); int right=count(i+1,hi); ret+=left*right; } mem[lo][hi]=ret; return ret; } vector<vector<int>> mem; };
95. 不同的二叉搜索树II(中等)
题目:
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。
示例 1:
* 输入:n = 3
* 输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
* 示例 2:
* 输入:n = 1
* 输出:[[1]]
思路:
递归遍历所有可能性,当lo>hi时,只有null一种可能性,build(lo,hi)就返回了所有可能构建的根节点数组
所以遍历i=lo;i<=hi,然后得到build(lo,i-1)与build(i+1,hi)的数组后,遍历组合即可。
class Solution { public: vector<TreeNode*> generateTrees(int n) { if(n==0) return vector<TreeNode*>(); return build(1,n); } vector<TreeNode*> build(int lo,int hi){ vector<TreeNode*> ret; if(lo>hi){ ret.push_back(nullptr); return ret; } for(int i=lo;i<=hi;++i){ vector<TreeNode*> left=build(lo,i-1); vector<TreeNode*> right=build(i+1,hi); for(int j=0;j<left.size();++j){ for(int k=0;k<right.size();++k){ TreeNode* root=new TreeNode(i); root->left=left[j]; root->right=right[k]; ret.push_back(root); } } } return ret; } };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2017-02-10 android studio——Could not find method externalNativeBuild()