leetcode 95. 不同的二叉搜索树 II

超、凢脫俗 2023-07-03 04:35 107阅读 0赞

根据上一题的思路。这次只要dfs即可。

这个可以说是dfs里面比较麻烦的了,一开始打算使用二重指针,但后面发现使用vector<*> 更简单。

总的来说,思路很简单。但是写的时候需要注意一些细节。

dfs这种东西,只要理解了,就很容易写出来。也不太好讲。直接看代码吧。

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. vector<TreeNode*> generateTrees(int n) {
  13. vector<TreeNode*> vec;
  14. if(n==0) return vec;
  15. return dfs(1,n);
  16. }
  17. vector<TreeNode*> dfs(int l,int r)
  18. {
  19. if(l>r)
  20. {
  21. vector<TreeNode*> vec;
  22. TreeNode *tmp=NULL;
  23. vec.push_back(tmp);
  24. return vec;
  25. }
  26. else if(l==r)
  27. {
  28. TreeNode *tmp=new TreeNode(l);
  29. vector<TreeNode*> vec;
  30. vec.push_back(tmp);
  31. return vec;
  32. }
  33. else
  34. {
  35. vector<TreeNode*> vec;
  36. for(int i=l;i<=r;i++)
  37. {
  38. TreeNode *root=new TreeNode(i);
  39. vector<TreeNode*> left=dfs(l,i-1);
  40. vector<TreeNode*> right=dfs(i+1,r);
  41. for(auto lt:left)
  42. {
  43. for(auto rt:right)
  44. {
  45. TreeNode *tmp=new TreeNode(i);
  46. tmp->left=lt;
  47. tmp->right=rt;
  48. vec.push_back(tmp);
  49. }
  50. }
  51. }
  52. return vec;
  53. }
  54. }
  55. };

发表评论

表情:
评论列表 (有 0 条评论,107人围观)

还没有评论,来说两句吧...

相关阅读