二叉搜索树中的两个节点被错误地交换。
请在不改变其结构的情况下,恢复这棵树。
示例 1:
输入: [1,3,null,null,2]
1
/
3
\
2
输出: [3,1,null,null,2]
3
/
1
\
2
示例 2:
输入: [3,1,4,null,null,2]
3
/ \
1 4
/
2
输出: [2,1,4,null,null,3]
2
/ \
1 4
/
3
进阶:
使用 O(n) 空间复杂度的解法很容易实现。
你能想出一个只使用常数空间的解决方案吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/recover-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
先中序遍历得到所有节点的值,然后把中序遍历的结果排序,再把排序后的结果填回。
class Solution(object):
def recoverTree(self, root):
"""
:type root: TreeNode
:rtype: None Do not return anything, modify root in-place instead.
"""
def inOrder(node):
if not node:
return []
return inOrder(node.left) + [node.val] + inOrder(node.right)
inorder = inOrder(root)
inorder.sort()
self.idx = 0
def change(node):
if not node:
return
change(node.left)
node.val = inorder[self.idx]
self.idx += 1
change(node.right)
change(root)
return root