题目
二叉搜索树中的两个节点被错误地交换。
请在不改变其结构的情况下,恢复这棵树。
代码python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def recoverTree(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
def inorderTraversal(root:TreeNode):##中序排序
if not root:
return []
else:
return inorderTraversal(root.left) + [root.val] + inorderTraversal(root.right)
nums = inorderTraversal(root)
def exchange_order(nums):###找出出错的两个点
lens = len(nums)
temp1 = -1
temp2 = -1
for i in range(lens - 1):
if nums[i + 1] < nums[i]:
temp2 = nums[i + 1] #第一个出错数值
if temp1 == -1: ##第二个
temp1 = nums[i]
else:
break
return temp1, temp2
temp1,temp2 = exchange_order(nums)
def recover(root: TreeNode, count):
if root:
if root.val == temp1 or root.val == temp2:
if root.val == temp1:
root.val = temp2
else:
root.val = temp1
count -= 1
if count == 0:
return
recover(root.left, count)
recover(root.right, count)
recover(root, 2)
思路:
先中序排序,再根据是否存在未排序的数,更换之。