题解 | #找到搜索二叉树中两个错误的节点#
找到搜索二叉树中两个错误的节点
https://www.nowcoder.com/practice/4582efa5ffe949cc80c136eeb78795d6
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类 the root
# @return int整型一维数组
#
class Solution:
def __init__(self) -> None:
# 创建一个列表用于存储中序遍历的节点值
self.res = []
def findError(self, root: TreeNode) -> List[int]:
# write code here
if not root:
return []
# 获取中序排列的节点数据
self.inorder(root)
# 将错误的节点列表重新排序
# 如果中序遍历的节点值与排序后的节点值不相等,则说明该节点是错误节点
# 如: [3,2,1,4] 排序后是 [1,2,3,4]
# 3 和 1 的节点值不相等,则说明这两个节点是错误节点
alstt = sorted(self.res)
res_lst = []
for l,r in zip(self.res, alstt):
if l != r:
res_lst.append(l)
# 结果是从大到小排列的,因此倒序输出
return res_lst[::-1]
def inorder(self, root:TreeNode):
# 中序遍历树,因为搜索树的中序遍历是从小到大排列的,因此只需要找到排序不正常的值即可
if not root:
return None
self.inorder(root.left)
self.res.append(root.val)
self.inorder(root.right)
