题目:
一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找出这两个错误的节点并返回。已知二叉树中所有节点的值都不一样,给定二叉树的头节点,返回一个长度为2的二叉树节点类型的数组errs。
def getTwoErrorNode(root):
errs = [None for i in range(2)]
if not root:
return errs
stack = []
pre = None
while root or stack:
if root:
stack.append(root)
root = root.left
else:
root = stack.pop()
if pre and pre.val > root.val:
if errs[0] == None:
errs[0] = pre
errs[1] = root
pre = root
root = root.right
return errs