一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请按升序输出这两个错误节点的值。(每个节点的值各不相同)
搜索二叉树:满足每个节点的左子节点小于当前节点,右子节点大于当前节点。
样例1图
样例2图
数据范围:,节点上的值满足 ,保证每个value各不相同
进阶:空间复杂度 ,时间复杂度
{1,2,3}
[1,2]
如题面图
{4,2,5,3,1}
[1,3]
class Solution: def findError(self , root: TreeNode) -> List[int]: # write code here def dfs(root): if not root:return dfs(root.left) if root.val !=self.count:self.res.append(root.val) self.count +=1 dfs(root.right) self.res,self.count =[],1 dfs(root) self.res.sort() return self.res
class Solution: def findError(self , root: TreeNode) -> List[int]: # write code here res=[] def inorder(root): if not root: return inorder(root.left) res.append(root.val) inorder(root.right) return res res=inorder(root) exchange=[] index=[] for i in range(len(res)-1): if len(index)<1: if res[i]>res[i+1]: exchange.append(res[i]) index.append(i) elif len(index)>=1 and i>index[0]+1: if res[i]<res[i+1] and res[i]<res[i-1]: exchange.append(res[i]) index.append(i) # return res if len(exchange)==2: return [exchange[1],exchange[0]] elif len(exchange)==1: return [res[index[0]+1],exchange[0]]