当前位置: 首页 > 知识库问答 >
问题:

增加顺序搜索树-找不到我的解决方案中的bug

束敏学
2023-03-14
class Solution {
public:
   void search(TreeNode* root, TreeNode*& dummy){
       if(root == nullptr)
           return;
       
       search(root->left, dummy);
       dummy->right = root;
       dummy = dummy->right;
       search(root->right, dummy);
   }
   TreeNode* increasingBST(TreeNode* root) {
       TreeNode* dummy = new TreeNode();
       TreeNode* itr = dummy;
       search(root, dummy);
       return itr->right;
   }
};

大家好,

我不想创建新节点,而是想更改链接。有人能帮我理解为什么这个解决方案不起作用吗?

共有1个答案

伊裕
2023-03-14

代码的问题是没有清除当前dummy节点的left引用。结果树不应该留下子树,通过保留这些子树,您就创建了循环。所以清除:

   search(root->left, dummy);
   root->left = nullptr;  // <--
   dummy->right = root;
   dummy = root;
   search(root->right, dummy);

请注意,dummy=dummy->right等效于dummy=root(也已更改)。

 类似资料:
  • 这是来自leetcode的问题。它说 给定二叉搜索树的根,按顺序重新排列树,使树中最左边的节点现在是树的根,每个节点没有左子节点,只有一个右子节点。 例2:, 我的代码几乎与下面相同, 在输入[2,1,4,null,null,3]之前,它可以很好地处理多个输入。实际上,它最终还是返回了,但我仍然收到了“超过时间限制”的错误。我发现有一个类似的解决方案,但它激活了上面的两行, 那就行了。我不明白为什

  • 下面是我的密码 这里是错误 10-30 02:47:02.699 2195-2195/com。srg。ibc。任命申请书W/EGL_genymotion﹕ 未实施eglSurfaceAttrib 10-30 02:47:03.075 2195-2195/com。srg。ibc。任命应用程序E/WindowManager﹕ 活动网。srg。ibc。任命申请。CalendarView已泄漏Window

  • 给定一个二维板和一个单词,找出这个单词是否存在于网格中。 这个词可以由顺序相邻单元格的字母构成,其中“相邻”单元格是那些水平或垂直相邻的单元格。同一个字母单元格不能使用不止一次。 例如,给定 这是典型的DFS+回溯解决方案。它将与进行比较。如果它们匹配,则将更改为以将其标记为已访问。然后移动到下一个(即)并将其与当前邻居进行比较(通过递归进行)。 下面是我的代码,这是不工作。我试着调试,但我觉得在

  • 我正在为Java中的Peg纸牌游戏开发一个解决方案。然而,我的解决方案似乎无法解决游戏。 我正在使用“标准”版本,所以董事会看起来像: 0为空,1为钉,2为空 所需的电路板状态为 我的Solutions()方法是这样工作的: 沿

  • 我想将第一行与来自user的输入隔离为VIX、SPX和VOL。然而,在这样的数据库中,我不知道这些变量是在哪个组合中保存的。 也就是说,我们可以将VIX设为Var1,SPX设为Var2,VOL设为Var3,也可以将VOL设为Var1,SPX设为Var2,VIX设为Var3。在这种情况下,可以有6种组合。 我可以将字符串串联起来,在R中创建所有6种可能性,并进行行查找。但我正在寻找一个更简单的算法。