题解 | #找到搜索二叉树中两个错误的节点#

找到搜索二叉树中两个错误的节点

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)




全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务