99. 恢复二叉搜索树
问题描述
https://leetcode.cn/problems/recover-binary-search-tree/description/
解题思路
二叉搜索树的中序遍历一定是一个有序的序列。
题目中说两个节点的值被交换了,即我们中序遍历得到的二叉搜索树是无序的,但交换两个节点即为有序。
所以,我们可以:
- 深度优先搜索,搞到二叉搜索树的序列。
- 将这个序列排序,再次遍历,找到需要交换值的节点。
- 将值进行交换。
代码
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def recoverTree(self, root: Optional[TreeNode]) -> None: """ Do not return anything, modify root in-place instead. """ li = [] def dfs(root): if not root: return dfs(root.left) li.append((root.val, root)) dfs(root.right) dfs(root) li_sort = sorted(li, key=lambda x: x[0]) swaped = [] for i in range(len(li)): if li[i][0] != li_sort[i][0]: swaped.append(li[i][1]) x, y = swaped x.val, y.val = y.val, x.val
2024二刷:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def recoverTree(self, root: Optional[TreeNode]) -> None: """ Do not return anything, modify root in-place instead. """ mem = [] vals = [] def dfs(root): if root: dfs(root.left) mem.append(root) vals.append(root.val) dfs(root.right) dfs(root) vals.sort() for i in range(len(mem)): mem[i].val = vals[i]
分类:
leetcode中等题
, leetcode-深度优先搜索
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)