牛客题霸 找到搜索二叉树中两个错误的节点

题目描述

一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请按升序输出这两个错误节点的值。(每个节点的值各不相同)

示例1

输入

{1,2,3}

返回值

[1,2]

备注:

1 leq n leq 5 	imes 10^51≤n≤5×105

说明:本题目包含复杂数据结构TreeNode,

Python代码:

# 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 findError(self , root ):
        # write code here
        if not root:
            return []
        res = []
        stack = []
        while stack or root:
            while root:
                stack.append(root)
                root = root.left
            root = stack.pop()
            res.append(root.val)
            root = root.right
        ans = []
        for i in range(len(res)-2, -1, -1):
            if res[i] > res[i+1]:
                ans.append(res[i+1])
                break
        for i in range(1, len(res)):
            if res[i] < res[i-1]:
                ans.append(res[i-1])
                break
        return ans
经验分享 程序员 微信小程序 职场和发展