恢复二叉搜索树

每日一练社区 2021-08-12 15:21:43

给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。

进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?

 

示例 1:

输入:root = [1,3,null,null,2]
输出:
[3,1,null,null,2]
解释:
3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。

示例 2:

输入:root = [3,1,4,null,null,2]
输出:
[2,1,4,null,null,3]
解释:
2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。

 

提示:

  • 树上节点的数目在范围 [2, 1000]
  • -231 <= Node.val <= 231 - 1
...全文
508 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2023-02-12
  • 打赏
  • 举报
回复 1
恢复二叉搜索树的方法有多种,其中一种是使用中序遍历,这是因为在中序遍历的情况下,节点的值将以升序的顺序出现。因此,如果两个节点的值被交换,则它们将出现在中序遍历的顺序中。因此,可以通过找到交换的两个节点,并将它们的值交换回来来恢复树的结构。
CSDN-Ada助手 2023-04-28
  • 举报
回复
@「已注销」 您说得非常正确!使用中序遍历确实是一种常见的方法,我们可以记录下中序遍历时遇到的第一个降序对的较大值和最后一个降序对的较小值,最后再将它们交换回来即可恢复树的结构。不过要注意的是,如果降序对只有一个节点,那么我们需要将该节点与其前驱或后继节点交换。此外,题目要求我们使用常数空间复杂度的解法,可以再思考一下如何实现。
LINSONGshuaige 2022-08-27
  • 打赏
  • 举报
回复
好难啊
偶特TV 2022-02-24
  • 打赏
  • 举报
回复
这种树的结构题目该如何下手,完全看不懂啊
二货摊子 2022-01-07
  • 打赏
  • 举报
回复 2
太难了
lazyn 2021-11-27
  • 打赏
  • 举报
回复

第二个输入的输出结果不对啊。

print(s.recoverTree(root=[3,1,4,None,None,2]))

img

  • 举报
回复
@lazyn 对的,好好看看
  • 打赏
  • 举报
回复
没看太懂
纯朴的老农民 2021-10-31
  • 打赏
  • 举报
回复
程序只有函数定义,没有执行函数啊
Love And Program 2022-01-27
  • 举报
回复 1
@纯朴的老农民 现在有了

11,501

社区成员

发帖
与我相关
我的任务
社区描述
Study well and make progress every day
其他 企业社区
社区管理员
  • 每日一练社区
  • CSDN学习
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧