(leetcode刷题)
恢复二叉搜索树
题目: 二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。(二叉搜索树是指中序遍历时节点的值按从小到大排序)
示例:
方法
- 我的想法是两边遍历,第一遍按照中序遍历找到所有值,排序,第二遍遍历时改变每个节点的值。
class Solution:
def recoverTree(self, root: TreeNode) -> None:
""" Do not return anything, modify root in-place instead. """
if not root:return []
stack,ret=[],[]
curr=root
while stack or curr:
if curr:
stack.append(curr)
curr=curr.left
else:
curr=stack.pop()
ret.append(curr.val)
curr=curr.right
ret.sort(reverse=True)
while ret or stack:
if root:
stack.append(root)
root=root.left
else:
root=stack.pop()
root.val=ret.pop()
root=root.right
官方方法
- 官方解题方法的关键在于找到两个位置错误的节点。来源:leetcode链接