大型网站 php工程建设龙头
2026/5/14 4:05:34 网站建设 项目流程
大型网站 php,工程建设龙头,站长之家seo一点询,淄博百度电话前言 今天这一题也是非常的憋屈#xff0c;在递归上的运用可谓是得心应手#xff0c;但是在一些小细节上却存在着致命的问题#xff0c;现在来总结一下。 题目#xff1a;点这里 解法#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* in…前言今天这一题也是非常的憋屈在递归上的运用可谓是得心应手但是在一些小细节上却存在着致命的问题现在来总结一下。题目点这里解法/** * 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: vectorint 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(numret.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就能完美解决问题。反思还有这里相比用形参来传值更好的做法是利用引用这样可以增强代码的简洁性和可读性

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询