当前位置: 首页 > news >正文

树的练习7--------LCR 052.递增顺序搜索树

前言

今天这一题也是非常的憋屈,在递归上的运用可谓是得心应手,但是在一些小细节上却存在着致命的问题,现在来总结一下。

题目:点这里

解法:

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<int> ret; int num; void inOrder(TreeNode* root){ if(root){ inOrder(root->left); ret.push_back(root->val); inOrder(root->right); } } TreeNode* dfs(int num){ if(num==ret.size()){ return NULL; } TreeNode* root = new TreeNode(ret[num]); root->right = dfs(++num);//如果是num++,那代表num是先传入再递增,传入的num的值永不改变,如果是++num,则代表是先递增后传入,虽然每次传入的num都增值了,但是本层函数中的num也增加了,这就使得后续传参错位。 root->left = NULL; // root->val = ret[num]; return root; } TreeNode* increasingBST(TreeNode* root) { ret.clear(); num = 0; inOrder(root); return dfs(num); } };

这个题目的思路很清晰,就是先将二叉搜索树利用前序遍历存入到数组中,然后将数组中的值利用遍历生成一棵符合要求的树。

小问题出现在第二步上,由于这棵树需要利用数组,所以我将索引作为形参来传递,但是在每次传入的值这里出了问题,如果传入的是num++,代表先传入后增值,那么在递归过程中num就不会改变了,也就进入了无穷次的递归;但如果改成++num,则代表先递增后传入,这样的话虽然num的值发生了改变,但是每一层的num却都加了不该加的1,导致归的时候根节点的赋值出现了错位,所以也是不对的;

我选择的补救措施是在递的时候提前赋值,就是这一行语句:

TreeNode* root = new TreeNode(ret[num]);

配合++num就能完美解决问题。

反思

还有这里相比用形参来传值,更好的做法是利用引用,这样可以增强代码的简洁性和可读性

http://www.cnnetsun.cn/news/720545.html

相关文章:

  • SSM290吃货美食网站掌柜有礼vue
  • SSM295的企业销售人才培训系统vue
  • AI写作知识体系:架构、理论与工程实践【高级版】
  • Wi-Fi信号检测心跳技术:非接触式心率监测新突破
  • 大数据毕设项目:基于hadoop的山东瓜果蔬菜分析系统(源码+文档,讲解、调试运行,定制等)
  • Selenium中隐式等待(Implicit Wait)和显式等待(Explicit Wait)的区别
  • SSM277课程在线考试组卷管理系统vue
  • 大数据毕设项目推荐-基于python的灾情数据可视化系统基于python大数据的自然灾害地震等数据可视化分析系统【附源码+文档,调试定制服务】
  • 我是AI应用架构师,给某制造企业做算力规划的过程,全记录
  • 大数据毕设项目:基于机器学习的网络购物平台的智能推荐(源码+文档,讲解、调试运行,定制等)
  • 达梦数据库使用过程中常见问题
  • 【毕业设计】基于机器学习的网络购物平台的智能推荐(源码+文档+远程调试,全bao定制等)
  • 强烈安利专科生必用TOP8一键生成论文工具
  • 大数据毕设选题推荐:基于django的菜价可视化系统蔬菜销售分析与预测可视化系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 含分布式电源的配电网日前两阶段优化调度模型-无功优化Matlab代码
  • AI多语言混合输入的语种识别测试:测试工程师的破壁之战
  • 【计算机毕业设计案例】基于Python的网络小说分析系统设计与实现(程序+文档+讲解+定制)
  • 【课程设计/毕业设计】基于大数据+django+mysql的学习资源推送系统的设计与实现基于Django+大数据的学习资源推送系统【附源码、数据库、万字文档】
  • 大数据毕设项目:基于django的蔬菜销售分析与预测可视化系统(源码+文档,讲解、调试运行,定制等)
  • 数据即服务在大数据领域的创新应用与实践
  • 【毕业设计】基于Django+大数据的学习资源推送系统(源码+文档+远程调试,全bao定制等)
  • AI让产品经理工作消失?不,是进化:2026年PM的核心能力重塑
  • 2025年最全大模型工具合集:从文本生成到编程开发,一键收藏必备!
  • Python计算机毕设之基于Python的网络小说分析系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 大模型的三条进化路线:OpenAI、DeepMind、DeepSeek如何重塑AI结构
  • 数据中台中的数据服务编排可视化
  • Python语法进阶笔记(五)
  • paperxie 毕业论文:硕士专属智能写作工具,30000 字高质论文轻松交付
  • paperxie 毕业论文:本科通关神器,3000 字原创轻松交付[特殊字符]
  • 使用 pip3 一键卸载当前环境中所有已安装的 Python 包(Linux / macOS / Windows)